FINERACT-826 Migrate to java.time from Joda API

This commit is contained in:
percyashu
2020-10-24 22:27:00 +01:00
committed by Awasum Yannick
parent 5f42112278
commit 43ef6e1983
514 changed files with 2277 additions and 2010 deletions
@@ -24,6 +24,7 @@ import static org.apache.fineract.accounting.accrual.api.AccrualAccountingConsta
import com.google.gson.JsonElement;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
@@ -40,7 +41,6 @@ import org.apache.fineract.infrastructure.core.serialization.FromApiJsonDeserial
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
import org.apache.fineract.infrastructure.core.service.DateUtils;
import org.apache.fineract.portfolio.loanaccount.guarantor.command.GuarantorCommand;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -22,6 +22,7 @@ import static org.apache.fineract.accounting.accrual.api.AccrualAccountingConsta
import static org.apache.fineract.accounting.accrual.api.AccrualAccountingConstants.PERIODIC_ACCRUAL_ACCOUNTING_RESOURCE_NAME;
import static org.apache.fineract.accounting.accrual.api.AccrualAccountingConstants.accrueTillParamName;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import org.apache.fineract.accounting.accrual.serialization.AccrualAccountingDataValidator;
@@ -32,7 +33,6 @@ import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder;
import org.apache.fineract.infrastructure.core.exception.MultiException;
import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException;
import org.apache.fineract.portfolio.loanaccount.service.LoanAccrualPlatformService;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -19,7 +19,7 @@
package org.apache.fineract.accounting.closure.api;
import io.swagger.v3.oas.annotations.media.Schema;
import org.joda.time.LocalDate;
import java.time.LocalDate;
final class GLClosuresApiResourceSwagger {
@@ -18,13 +18,13 @@
*/
package org.apache.fineract.accounting.closure.command;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import org.apache.fineract.accounting.closure.api.GLClosureJsonInputParams;
import org.apache.fineract.infrastructure.core.data.ApiParameterError;
import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder;
import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException;
import org.joda.time.LocalDate;
/**
* Immutable command for adding an accounting closure
@@ -18,10 +18,10 @@
*/
package org.apache.fineract.accounting.closure.data;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collection;
import org.apache.fineract.organisation.office.data.OfficeData;
import org.joda.time.LocalDate;
/**
* Immutable object representing a General Ledger Account
@@ -18,8 +18,8 @@
*/
package org.apache.fineract.accounting.closure.exception;
import java.time.LocalDate;
import org.apache.fineract.infrastructure.core.exception.AbstractPlatformDomainRuleException;
import org.joda.time.LocalDate;
/**
* A {@link RuntimeException} thrown when a GL Closure for a given date and Office combination is already present
@@ -21,6 +21,7 @@ package org.apache.fineract.accounting.closure.serialization;
import com.google.gson.JsonElement;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.time.LocalDate;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
@@ -31,7 +32,6 @@ import org.apache.fineract.infrastructure.core.serialization.AbstractFromApiJson
import org.apache.fineract.infrastructure.core.serialization.FromApiJsonDeserializer;
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
import org.apache.fineract.portfolio.loanaccount.guarantor.command.GuarantorCommand;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -20,13 +20,13 @@ package org.apache.fineract.accounting.closure.service;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.List;
import org.apache.fineract.accounting.closure.data.GLClosureData;
import org.apache.fineract.accounting.closure.exception.GLClosureNotFoundException;
import org.apache.fineract.infrastructure.core.domain.JdbcSupport;
import org.apache.fineract.infrastructure.core.service.RoutingDataSource;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
@@ -18,6 +18,8 @@
*/
package org.apache.fineract.accounting.closure.service;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;
import java.util.Map;
import org.apache.fineract.accounting.closure.api.GLClosureJsonInputParams;
@@ -36,7 +38,6 @@ import org.apache.fineract.infrastructure.core.data.CommandProcessingResultBuild
import org.apache.fineract.infrastructure.core.exception.PlatformDataIntegrityException;
import org.apache.fineract.organisation.office.domain.Office;
import org.apache.fineract.organisation.office.domain.OfficeRepositoryWrapper;
import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -149,7 +150,8 @@ public class GLClosureWritePlatformServiceJpaRepositoryImpl implements GLClosure
private void handleGLClosureIntegrityIssues(final JsonCommand command, final Throwable realCause, NonTransientDataAccessException dve) {
if (realCause.getMessage().contains("office_id_closing_date")) {
throw new GLClosureDuplicateException(command.longValueOfParameterNamed(GLClosureJsonInputParams.OFFICE_ID.getValue()),
new LocalDate(command.dateValueOfParameterNamed(GLClosureJsonInputParams.CLOSING_DATE.getValue())));
LocalDate.ofInstant(command.dateValueOfParameterNamed(GLClosureJsonInputParams.CLOSING_DATE.getValue()).toInstant(),
ZoneId.systemDefault()));
}
LOG.error("Error occured.", dve);
@@ -18,11 +18,12 @@
*/
package org.apache.fineract.accounting.journalentry.api;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;
import java.util.Locale;
import javax.ws.rs.WebApplicationException;
import org.apache.fineract.infrastructure.core.serialization.JsonParserHelper;
import org.joda.time.LocalDate;
/**
* Class for parsing dates sent as query parameters
@@ -40,6 +41,6 @@ public class DateParam {
public Date getDate(final String parameterName, final String dateFormat, final String localeAsString) {
final Locale locale = JsonParserHelper.localeFromString(localeAsString);
final LocalDate localDate = JsonParserHelper.convertFrom(this.dateAsString, parameterName, dateFormat, locale);
return localDate.toDate();
return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
}
}
@@ -19,13 +19,13 @@
package org.apache.fineract.accounting.journalentry.command;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import org.apache.fineract.accounting.journalentry.api.JournalEntryJsonInputParams;
import org.apache.fineract.infrastructure.core.data.ApiParameterError;
import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder;
import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException;
import org.joda.time.LocalDate;
/**
* Immutable command for adding an accounting closure
@@ -19,11 +19,11 @@
package org.apache.fineract.accounting.journalentry.data;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
import org.apache.fineract.accounting.glaccount.data.GLAccountData;
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
import org.apache.fineract.organisation.monetary.data.CurrencyData;
import org.joda.time.LocalDate;
/**
* Immutable object representing a General Ledger Account
@@ -18,9 +18,9 @@
*/
package org.apache.fineract.accounting.journalentry.data;
import java.time.LocalDate;
import java.util.List;
import org.apache.fineract.accounting.glaccount.data.GLAccountData;
import org.joda.time.LocalDate;
public final class OfficeOpeningBalancesData {
@@ -24,6 +24,7 @@ import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.HashSet;
import java.util.Locale;
import java.util.Map;
@@ -36,7 +37,6 @@ import org.apache.fineract.infrastructure.core.exception.InvalidJsonException;
import org.apache.fineract.infrastructure.core.serialization.AbstractFromApiJsonDeserializer;
import org.apache.fineract.infrastructure.core.serialization.FromApiJsonDeserializer;
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -19,6 +19,8 @@
package org.apache.fineract.accounting.journalentry.service;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedHashMap;
@@ -72,7 +74,6 @@ import org.apache.fineract.portfolio.savings.data.SavingsAccountTransactionEnumD
import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction;
import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransactionRepository;
import org.apache.fineract.portfolio.shareaccounts.data.ShareAccountTransactionEnumData;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -131,7 +132,7 @@ public class AccountingProcessorHelper {
for (final Map<String, Object> map : newTransactionsMap) {
final Long transactionOfficeId = (Long) map.get("officeId");
final String transactionId = ((Long) map.get("id")).toString();
final Date transactionDate = ((LocalDate) map.get("date")).toDate();
final Date transactionDate = Date.from(((LocalDate) map.get("date")).atStartOfDay(ZoneId.systemDefault()).toInstant());
final LoanTransactionEnumData transactionType = (LoanTransactionEnumData) map.get("type");
final BigDecimal amount = (BigDecimal) map.get("amount");
final BigDecimal principal = (BigDecimal) map.get("principalPortion");
@@ -198,7 +199,7 @@ public class AccountingProcessorHelper {
for (final Map<String, Object> map : newTransactionsMap) {
final Long transactionOfficeId = (Long) map.get("officeId");
final String transactionId = ((Long) map.get("id")).toString();
final Date transactionDate = ((LocalDate) map.get("date")).toDate();
final Date transactionDate = Date.from(((LocalDate) map.get("date")).atStartOfDay(ZoneId.systemDefault()).toInstant());
final SavingsAccountTransactionEnumData transactionType = (SavingsAccountTransactionEnumData) map.get("type");
final BigDecimal amount = (BigDecimal) map.get("amount");
final boolean reversed = (Boolean) map.get("reversed");
@@ -267,7 +268,7 @@ public class AccountingProcessorHelper {
for (final Map<String, Object> map : newTransactionsMap) {
final Long transactionOfficeId = (Long) map.get("officeId");
final String transactionId = ((Long) map.get("id")).toString();
final Date transactionDate = ((LocalDate) map.get("date")).toDate();
final Date transactionDate = Date.from(((LocalDate) map.get("date")).atStartOfDay(ZoneId.systemDefault()).toInstant());
final ShareAccountTransactionEnumData transactionType = (ShareAccountTransactionEnumData) map.get("type");
final ShareAccountTransactionEnumData transactionStatus = (ShareAccountTransactionEnumData) map.get("status");
final BigDecimal amount = (BigDecimal) map.get("amount");
@@ -303,7 +304,8 @@ public class AccountingProcessorHelper {
final Long transactionOfficeId = (Long) accountingBridgeData.get("officeId");
final Long clientId = (Long) accountingBridgeData.get("clientId");
final Long transactionId = (Long) accountingBridgeData.get("id");
final Date transactionDate = ((LocalDate) accountingBridgeData.get("date")).toDate();
final Date transactionDate = Date
.from(((LocalDate) accountingBridgeData.get("date")).atStartOfDay(ZoneId.systemDefault()).toInstant());
final EnumOptionData transactionType = (EnumOptionData) accountingBridgeData.get("type");
final BigDecimal amount = (BigDecimal) accountingBridgeData.get("amount");
final boolean reversed = (Boolean) accountingBridgeData.get("reversed");
@@ -23,6 +23,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
@@ -60,7 +61,6 @@ import org.apache.fineract.portfolio.paymentdetail.data.PaymentDetailData;
import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData;
import org.apache.fineract.portfolio.savings.data.SavingsAccountTransactionEnumData;
import org.apache.fineract.portfolio.savings.service.SavingsEnumerations;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
@@ -19,6 +19,8 @@
package org.apache.fineract.accounting.journalentry.service;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
@@ -76,7 +78,6 @@ import org.apache.fineract.portfolio.client.domain.ClientTransaction;
import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail;
import org.apache.fineract.portfolio.paymentdetail.service.PaymentDetailWritePlatformService;
import org.apache.fineract.useradministration.domain.AppUser;
import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -592,7 +593,7 @@ public class JournalEntryWritePlatformServiceJpaRepositoryImpl implements Journa
private void validateBusinessRulesForJournalEntries(final JournalEntryCommand command) {
/** check if date of Journal entry is valid ***/
final LocalDate entryLocalDate = command.getTransactionDate();
final Date transactionDate = entryLocalDate.toDateTimeAtStartOfDay().toDate();
final Date transactionDate = Date.from(entryLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
// shouldn't be in the future
final Date todaysDate = new Date();
if (transactionDate.after(todaysDate)) {
@@ -21,6 +21,7 @@ package org.apache.fineract.accounting.provisioning.serialization;
import com.google.gson.JsonElement;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
@@ -36,7 +37,6 @@ import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidati
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
import org.apache.fineract.infrastructure.core.service.DateUtils;
import org.apache.fineract.organisation.provisioning.exception.ProvisioningCriteriaCannotBeCreatedException;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -19,6 +19,8 @@
package org.apache.fineract.accounting.provisioning.service;
import com.google.gson.JsonObject;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
@@ -58,7 +60,6 @@ import org.apache.fineract.organisation.provisioning.service.ProvisioningCriteri
import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct;
import org.apache.fineract.portfolio.loanproduct.domain.LoanProductRepository;
import org.apache.fineract.useradministration.domain.AppUser;
import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -150,13 +151,13 @@ public class ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl implements
private Date parseDate(JsonCommand command) {
LocalDate localDate = this.fromApiJsonHelper.extractLocalDateNamed("date", command.parsedJson());
return localDate.toDate();
return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
}
@Override
@CronTarget(jobName = JobName.GENERATE_LOANLOSS_PROVISIONING)
public void generateLoanLossProvisioningAmount() {
Date currentDate = DateUtils.getLocalDateOfTenant().toDate();
Date currentDate = Date.from(DateUtils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant());
boolean addJournalEntries = true;
try {
Collection<ProvisioningCriteriaData> criteriaCollection = this.provisioningCriteriaReadPlatformService
@@ -18,12 +18,12 @@
*/
package org.apache.fineract.adhocquery.data;
import java.time.ZonedDateTime;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import org.apache.fineract.adhocquery.domain.ReportRunFrequency;
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
import org.joda.time.DateTime;
/**
* Immutable data object represent note or case information AdHocData
@@ -46,13 +46,13 @@ public class AdHocData {
@SuppressWarnings("unused")
private final boolean isActive;
@SuppressWarnings("unused")
private final DateTime createdOn;
private final ZonedDateTime createdOn;
@SuppressWarnings("unused")
private final Long createdById;
@SuppressWarnings("unused")
private final Long updatedById;
@SuppressWarnings("unused")
private final DateTime updatedOn;
private final ZonedDateTime updatedOn;
@SuppressWarnings("unused")
private final String createdBy;
@@ -62,12 +62,12 @@ public class AdHocData {
private final Long reportRunEvery;
private final DateTime lastRun;
private final ZonedDateTime lastRun;
public AdHocData(final Long id, final String name, final String query, final String tableName, final String tableFields,
final boolean isActive, final DateTime createdOn, final Long createdById, final Long updatedById, final DateTime updatedOn,
final String createdBy, final String email, final List<EnumOptionData> reportRunFrequencies, final Long reportRunFrequency,
final Long reportRunEvery, final DateTime lastRun) {
final boolean isActive, final ZonedDateTime createdOn, final Long createdById, final Long updatedById,
final ZonedDateTime updatedOn, final String createdBy, final String email, final List<EnumOptionData> reportRunFrequencies,
final Long reportRunFrequency, final Long reportRunEvery, final ZonedDateTime lastRun) {
this.id = id;
this.name = name;
this.query = query;
@@ -123,7 +123,7 @@ public class AdHocData {
return this.isActive;
}
public DateTime getCreatedOn() {
public ZonedDateTime getCreatedOn() {
return this.createdOn;
}
@@ -135,7 +135,7 @@ public class AdHocData {
return this.updatedById;
}
public DateTime getUpdatedOn() {
public ZonedDateTime getUpdatedOn() {
return this.updatedOn;
}
@@ -155,7 +155,7 @@ public class AdHocData {
return this.reportRunEvery;
}
public DateTime getLastRun() {
public ZonedDateTime getLastRun() {
return this.lastRun;
}
}
@@ -20,12 +20,12 @@ package org.apache.fineract.adhocquery.service;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.ZonedDateTime;
import java.util.Collection;
import org.apache.fineract.adhocquery.data.AdHocData;
import org.apache.fineract.adhocquery.exception.AdHocNotFoundException;
import org.apache.fineract.infrastructure.core.domain.JdbcSupport;
import org.apache.fineract.infrastructure.core.service.RoutingDataSource;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
@@ -81,15 +81,15 @@ public class AdHocReadPlatformServiceImpl implements AdHocReadPlatformService {
final String tableName = rs.getString("tableName");
final String tableFields = rs.getString("tableField");
final Boolean isActive = rs.getBoolean("isActive");
final DateTime createdDate = JdbcSupport.getDateTime(rs, "createdDate");
final ZonedDateTime createdDate = JdbcSupport.getDateTime(rs, "createdDate");
final Long createdById = JdbcSupport.getLong(rs, "createdById");
final Long updatedById = JdbcSupport.getLong(rs, "updatedById");
final DateTime updatedOn = JdbcSupport.getDateTime(rs, "updatedOn");
final ZonedDateTime updatedOn = JdbcSupport.getDateTime(rs, "updatedOn");
final String createdByUsername = rs.getString("createdBy");
final String email = rs.getString("email");
final Long reportRunFrequency = JdbcSupport.getLong(rs, "report_run_frequency_code");
final Long reportRunEvery = JdbcSupport.getLong(rs, "report_run_every");
final DateTime lastRun = JdbcSupport.getDateTime(rs, "last_run");
final ZonedDateTime lastRun = JdbcSupport.getDateTime(rs, "last_run");
return new AdHocData(id, name, query, tableName, tableFields, isActive, createdDate, createdById, updatedById, updatedOn,
createdByUsername, email, AdHocData.template().getReportRunFrequencies(), reportRunFrequency, reportRunEvery, lastRun);
@@ -18,6 +18,10 @@
*/
package org.apache.fineract.adhocquery.service;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;
import java.util.Collection;
import java.util.Date;
import org.apache.fineract.adhocquery.data.AdHocData;
@@ -26,11 +30,6 @@ import org.apache.fineract.infrastructure.core.service.RoutingDataSource;
import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil;
import org.apache.fineract.infrastructure.jobs.annotation.CronTarget;
import org.apache.fineract.infrastructure.jobs.service.JobName;
import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.LocalDate;
import org.joda.time.Months;
import org.joda.time.Years;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -65,27 +64,27 @@ public class AdHocScheduledJobRunnerServiceImpl implements AdHocScheduledJobRunn
if (adhoc.getReportRunFrequency() != null) {
if (adhoc.getLastRun() != null) {
LocalDate start = adhoc.getLastRun().toLocalDate();
LocalDate end = new DateTime().toLocalDate();
LocalDate end = ZonedDateTime.now(ZoneId.systemDefault()).toLocalDate();
switch (ReportRunFrequency.fromId(adhoc.getReportRunFrequency())) {
case DAILY:
next = start.plusDays(1);
run = Days.daysBetween(start, end).getDays() >= 1;
run = Math.toIntExact(ChronoUnit.DAYS.between(start, end)) >= 1;
break;
case WEEKLY:
next = start.plusDays(7);
run = Days.daysBetween(start, end).getDays() >= 7;
run = Math.toIntExact(ChronoUnit.DAYS.between(start, end)) >= 7;
break;
case MONTHLY:
next = start.plusMonths(1);
run = Months.monthsBetween(start, end).getMonths() >= 1;
run = Math.toIntExact(ChronoUnit.MONTHS.between(start, end)) >= 1;
break;
case YEARLY:
next = start.plusYears(1);
run = Years.yearsBetween(start, end).getYears() >= 1;
run = Math.toIntExact(ChronoUnit.YEARS.between(start, end)) >= 1;
break;
case CUSTOM:
next = start.plusDays((int) (long) adhoc.getReportRunEvery());
run = Days.daysBetween(start, end).getDays() >= adhoc.getReportRunEvery();
run = Math.toIntExact(ChronoUnit.DAYS.between(start, end)) >= adhoc.getReportRunEvery();
break;
default:
throw new IllegalStateException();
@@ -19,11 +19,11 @@
package org.apache.fineract.commands.api;
import io.swagger.v3.oas.annotations.media.Schema;
import java.time.ZonedDateTime;
import java.util.Collection;
import java.util.List;
import org.apache.fineract.commands.data.ProcessingResultLookup;
import org.apache.fineract.useradministration.data.AppUserData;
import org.joda.time.DateTime;
/**
* Created by sanyam on 27/7/17.
@@ -47,9 +47,9 @@ final class MakercheckersApiResourceSwagger {
public Long resourceId;
public Long subresourceId;
public String maker;
public DateTime madeOnDate;
public ZonedDateTime madeOnDate;
public String checker;
public DateTime checkedOnDate;
public ZonedDateTime checkedOnDate;
public String processingResult;
public String commandAsJson;
public String officeName;
@@ -18,7 +18,7 @@
*/
package org.apache.fineract.commands.data;
import org.joda.time.DateTime;
import java.time.ZonedDateTime;
/**
* Immutable data object representing client data.
@@ -37,11 +37,11 @@ public final class AuditData {
@SuppressWarnings("unused")
private final String maker;
@SuppressWarnings("unused")
private final DateTime madeOnDate;
private final ZonedDateTime madeOnDate;
@SuppressWarnings("unused")
private final String checker;
@SuppressWarnings("unused")
private final DateTime checkedOnDate;
private final ZonedDateTime checkedOnDate;
@SuppressWarnings("unused")
private final String processingResult;
private String commandAsJson;
@@ -65,7 +65,7 @@ public final class AuditData {
private final String url;
public AuditData(final Long id, final String actionName, final String entityName, final Long resourceId, final Long subresourceId,
final String maker, final DateTime madeOnDate, final String checker, final DateTime checkedOnDate,
final String maker, final ZonedDateTime madeOnDate, final String checker, final ZonedDateTime checkedOnDate,
final String processingResult, final String commandAsJson, final String officeName, final String groupLevelName,
final String groupName, final String clientName, final String loanAccountNo, final String savingsAccountNo, final Long clientId,
final Long loanId, final String url) {
@@ -18,6 +18,8 @@
*/
package org.apache.fineract.commands.domain;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
@@ -30,7 +32,6 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.fineract.infrastructure.core.api.JsonCommand;
import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
import org.apache.fineract.useradministration.domain.AppUser;
import org.joda.time.DateTime;
@Entity
@Table(name = "m_portfolio_command_source")
@@ -102,7 +103,7 @@ public class CommandSource extends AbstractPersistableCustom {
public static CommandSource fullEntryFrom(final CommandWrapper wrapper, final JsonCommand command, final AppUser maker) {
return new CommandSource(wrapper.actionName(), wrapper.entityName(), wrapper.getHref(), command.entityId(), command.subentityId(),
command.json(), maker, DateTime.now());
command.json(), maker, ZonedDateTime.now(ZoneId.systemDefault()));
}
protected CommandSource() {
@@ -110,7 +111,7 @@ public class CommandSource extends AbstractPersistableCustom {
}
private CommandSource(final String actionName, final String entityName, final String href, final Long resourceId,
final Long subresourceId, final String commandSerializedAsJson, final AppUser maker, final DateTime madeOnDateTime) {
final Long subresourceId, final String commandSerializedAsJson, final AppUser maker, final ZonedDateTime madeOnDateTime) {
this.actionName = actionName;
this.entityName = entityName;
this.resourceGetUrl = href;
@@ -118,7 +119,7 @@ public class CommandSource extends AbstractPersistableCustom {
this.subresourceId = subresourceId;
this.commandAsJson = commandSerializedAsJson;
this.maker = maker;
this.madeOnDate = madeOnDateTime.toDate();
this.madeOnDate = Date.from(madeOnDateTime.toInstant());
this.processingResult = CommandProcessingResultType.PROCESSED.getValue();
}
@@ -138,15 +139,15 @@ public class CommandSource extends AbstractPersistableCustom {
this.organisationCreditBureauId = organisationCreditBureauId;
}
public void markAsChecked(final AppUser checker, final DateTime checkedOnDate) {
public void markAsChecked(final AppUser checker, final ZonedDateTime checkedOnDate) {
this.checker = checker;
this.checkedOnDate = checkedOnDate.toDate();
this.checkedOnDate = Date.from(checkedOnDate.toInstant());
this.processingResult = CommandProcessingResultType.PROCESSED.getValue();
}
public void markAsRejected(final AppUser checker, final DateTime checkedOnDate) {
public void markAsRejected(final AppUser checker, final ZonedDateTime checkedOnDate) {
this.checker = checker;
this.checkedOnDate = checkedOnDate.toDate();
this.checkedOnDate = Date.from(checkedOnDate.toInstant());
this.processingResult = CommandProcessingResultType.REJECTED.getValue();
}
@@ -24,6 +24,7 @@ import com.google.gson.JsonObject;
import java.lang.reflect.Type;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.ZonedDateTime;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
@@ -63,7 +64,6 @@ import org.apache.fineract.portfolio.savings.service.SavingsProductReadPlatformS
import org.apache.fineract.useradministration.data.AppUserData;
import org.apache.fineract.useradministration.domain.AppUser;
import org.apache.fineract.useradministration.service.AppUserReadPlatformService;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -157,9 +157,9 @@ public class AuditReadPlatformServiceImpl implements AuditReadPlatformService {
final Long loanId = JdbcSupport.getLong(rs, "loanId");
final Long subresourceId = JdbcSupport.getLong(rs, "subresourceId");
final String maker = rs.getString("maker");
final DateTime madeOnDate = JdbcSupport.getDateTime(rs, "madeOnDate");
final ZonedDateTime madeOnDate = JdbcSupport.getDateTime(rs, "madeOnDate");
final String checker = rs.getString("checker");
final DateTime checkedOnDate = JdbcSupport.getDateTime(rs, "checkedOnDate");
final ZonedDateTime checkedOnDate = JdbcSupport.getDateTime(rs, "checkedOnDate");
final String processingResult = rs.getString("processingResult");
final String resourceGetUrl = rs.getString("resourceGetUrl");
String commandAsJson;
@@ -19,6 +19,8 @@
package org.apache.fineract.commands.service;
import com.google.gson.JsonElement;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Random;
import org.apache.fineract.commands.domain.CommandSource;
import org.apache.fineract.commands.domain.CommandSourceRepository;
@@ -33,7 +35,6 @@ import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil;
import org.apache.fineract.infrastructure.jobs.service.SchedulerJobRunnerReadService;
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
import org.apache.fineract.useradministration.domain.AppUser;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -186,7 +187,7 @@ public class PortfolioCommandSourceWritePlatformServiceImpl implements Portfolio
final CommandSource commandSourceInput = validateMakerCheckerTransaction(makerCheckerId);
validateIsUpdateAllowed();
final AppUser maker = this.context.authenticatedUser();
commandSourceInput.markAsRejected(maker, DateTime.now());
commandSourceInput.markAsRejected(maker, ZonedDateTime.now(ZoneId.systemDefault()));
this.commandSourceRepository.save(commandSourceInput);
return makerCheckerId;
}
@@ -18,6 +18,8 @@
*/
package org.apache.fineract.commands.service;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Map;
import org.apache.fineract.commands.domain.CommandSource;
import org.apache.fineract.commands.domain.CommandSourceRepository;
@@ -36,7 +38,6 @@ import org.apache.fineract.infrastructure.hooks.event.HookEvent;
import org.apache.fineract.infrastructure.hooks.event.HookEventSource;
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
import org.apache.fineract.useradministration.domain.AppUser;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
@@ -86,7 +87,7 @@ public class SynchronousCommandProcessingService implements CommandProcessingSer
CommandSource commandSourceResult = null;
if (command.commandId() != null) {
commandSourceResult = this.commandSourceRepository.findById(command.commandId()).orElse(null);
commandSourceResult.markAsChecked(maker, DateTime.now());
commandSourceResult.markAsChecked(maker, ZonedDateTime.now(ZoneId.systemDefault()));
} else {
commandSourceResult = CommandSource.fullEntryFrom(wrapper, command, maker);
}
@@ -18,7 +18,7 @@
*/
package org.apache.fineract.infrastructure.bulkimport.data;
import org.joda.time.LocalDate;
import java.time.LocalDate;
public final class ImportData {
@@ -18,6 +18,8 @@
*/
package org.apache.fineract.infrastructure.bulkimport.domain;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
@@ -30,7 +32,6 @@ import javax.persistence.TemporalType;
import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
import org.apache.fineract.infrastructure.documentmanagement.domain.Document;
import org.apache.fineract.useradministration.domain.AppUser;
import org.joda.time.LocalDateTime;
@Entity
@Table(name = "m_import_document")
@@ -77,7 +78,7 @@ public class ImportDocument extends AbstractPersistableCustom {
final Boolean completed = Boolean.FALSE;
final Integer successCount = 0;
final Integer failureCount = 0;
final LocalDateTime endTime = LocalDateTime.now();
final LocalDateTime endTime = LocalDateTime.now(ZoneId.systemDefault());
return new ImportDocument(document, importTime, endTime, completed, entityType, createdBy, totalRecords, successCount,
failureCount);
@@ -87,8 +88,8 @@ public class ImportDocument extends AbstractPersistableCustom {
final Integer entityType, final AppUser createdBy, final Integer totalRecords, final Integer successCount,
final Integer failureCount) {
this.document = document;
this.importTime = importTime.toDate();
this.endTime = endTime.toDate();
this.importTime = Date.from(importTime.atZone(ZoneId.systemDefault()).toInstant());
this.endTime = Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant());
this.completed = completed;
this.entityType = entityType;
this.createdBy = createdBy;
@@ -99,7 +100,7 @@ public class ImportDocument extends AbstractPersistableCustom {
}
public void update(final LocalDateTime endTime, final Integer successCount, final Integer errorCount) {
this.endTime = endTime.toDate();
this.endTime = Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant());
this.completed = Boolean.TRUE;
this.successCount = successCount;
this.failureCount = errorCount;
@@ -20,6 +20,8 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler;
import com.google.common.base.Splitter;
import com.google.common.collect.Iterables;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.List;
import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants;
import org.apache.fineract.infrastructure.core.data.ApiParameterError;
@@ -37,7 +39,6 @@ import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.SheetVisibility;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellReference;
import org.joda.time.LocalDate;
public final class ImportHandlerUtils {
@@ -144,7 +145,7 @@ public final class ImportHandlerUtils {
return null;
}
LocalDate localDate = new LocalDate(c.getDateCellValue());
LocalDate localDate = LocalDate.ofInstant(c.getDateCellValue().toInstant(), ZoneId.systemDefault());
return localDate;
}
@@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler.center;
import com.google.common.reflect.TypeToken;
import com.google.gson.GsonBuilder;
import java.lang.reflect.Type;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -45,7 +46,6 @@ import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -20,6 +20,7 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler.client;
import com.google.common.base.Splitter;
import com.google.gson.GsonBuilder;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -42,7 +43,6 @@ import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -20,6 +20,7 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler.client;
import com.google.common.base.Splitter;
import com.google.gson.GsonBuilder;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -40,7 +41,6 @@ import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -23,6 +23,7 @@ import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import org.apache.fineract.commands.domain.CommandWrapper;
@@ -47,7 +48,6 @@ import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler.fixeddeposit
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import org.apache.fineract.commands.domain.CommandWrapper;
@@ -41,7 +42,6 @@ import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler.group;
import com.google.common.reflect.TypeToken;
import com.google.gson.GsonBuilder;
import java.lang.reflect.Type;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -45,7 +46,6 @@ import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -22,6 +22,7 @@ import com.google.common.base.Splitter;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import org.apache.fineract.commands.domain.CommandWrapper;
@@ -40,7 +41,6 @@ import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -23,7 +23,8 @@ import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import java.lang.reflect.Type;
import org.joda.time.LocalDate;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class DateSerializer implements JsonSerializer<LocalDate> {
@@ -35,6 +36,6 @@ public class DateSerializer implements JsonSerializer<LocalDate> {
@Override
public JsonElement serialize(LocalDate src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src.toString(dateFormat));
return new JsonPrimitive(src.format(DateTimeFormatter.ofPattern(dateFormat)));
}
}
@@ -20,6 +20,7 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler.journalentry
import com.google.gson.GsonBuilder;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import org.apache.fineract.accounting.journalentry.data.CreditDebit;
@@ -41,7 +42,6 @@ import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -23,6 +23,7 @@ import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
@@ -48,7 +49,6 @@ import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -22,6 +22,7 @@ import com.google.common.base.Splitter;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import org.apache.fineract.commands.domain.CommandWrapper;
@@ -40,7 +41,6 @@ import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -19,6 +19,7 @@
package org.apache.fineract.infrastructure.bulkimport.importhandler.office;
import com.google.gson.GsonBuilder;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import org.apache.fineract.commands.domain.CommandWrapper;
@@ -37,7 +38,6 @@ import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler.recurringdep
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import org.apache.fineract.commands.domain.CommandWrapper;
@@ -44,7 +45,6 @@ import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler.recurringdep
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import org.apache.fineract.commands.domain.CommandWrapper;
@@ -42,7 +43,6 @@ import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler.savings;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
@@ -45,7 +46,6 @@ import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler.savings;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import org.apache.fineract.commands.domain.CommandWrapper;
@@ -41,7 +42,6 @@ import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -20,6 +20,7 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler.sharedaccoun
import com.google.gson.GsonBuilder;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import org.apache.fineract.commands.domain.CommandWrapper;
@@ -39,7 +40,6 @@ import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -19,6 +19,7 @@
package org.apache.fineract.infrastructure.bulkimport.importhandler.staff;
import com.google.gson.GsonBuilder;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import org.apache.fineract.commands.domain.CommandWrapper;
@@ -37,7 +38,6 @@ import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -104,10 +104,8 @@ public abstract class AbstractWorkbookPopulator implements WorkbookPopulator {
for (OfficeData office : offices) {
Row row = sheet.createRow(++rowIndex);
writeString(officeNameCol, row, office.name().trim().replaceAll("[ )(]", "_"));
writeDate(
activationDateCol, row, "" + office.getOpeningDate().getDayOfMonth() + "/"
+ office.getOpeningDate().getMonthOfYear() + "/" + office.getOpeningDate().getYear(),
dateCellStyle, dateFormat);
writeDate(activationDateCol, row, "" + office.getOpeningDate().getDayOfMonth() + "/"
+ office.getOpeningDate().getMonthValue() + "/" + office.getOpeningDate().getYear(), dateCellStyle, dateFormat);
}
}
@@ -211,7 +211,7 @@ public class FixedDepositTransactionWorkbookPopulator extends AbstractWorkbookPo
}
writeDate(TransactionConstants.LOOKUP_SAVINGS_ACTIVATION_DATE_COL, row,
"" + savingsAccount.getTimeline().getActivatedOnDate().getDayOfMonth() + "/"
+ savingsAccount.getTimeline().getActivatedOnDate().getMonthOfYear() + "/"
+ savingsAccount.getTimeline().getActivatedOnDate().getMonthValue() + "/"
+ savingsAccount.getTimeline().getActivatedOnDate().getYear(),
dateCellStyle, dateFormat);
}
@@ -212,7 +212,7 @@ public class RecurringDepositTransactionWorkbookPopulator extends AbstractWorkbo
}
writeDate(TransactionConstants.LOOKUP_SAVINGS_ACTIVATION_DATE_COL, row,
"" + savingsAccount.getTimeline().getActivatedOnDate().getDayOfMonth() + "/"
+ savingsAccount.getTimeline().getActivatedOnDate().getMonthOfYear() + "/"
+ savingsAccount.getTimeline().getActivatedOnDate().getMonthValue() + "/"
+ savingsAccount.getTimeline().getActivatedOnDate().getYear(),
dateCellStyle, dateFormat);
}
@@ -211,7 +211,7 @@ public class SavingsTransactionsWorkbookPopulator extends AbstractWorkbookPopula
}
writeDate(TransactionConstants.LOOKUP_SAVINGS_ACTIVATION_DATE_COL, row,
"" + savingsAccount.getTimeline().getActivatedOnDate().getDayOfMonth() + "/"
+ savingsAccount.getTimeline().getActivatedOnDate().getMonthOfYear() + "/"
+ savingsAccount.getTimeline().getActivatedOnDate().getMonthValue() + "/"
+ savingsAccount.getTimeline().getActivatedOnDate().getYear(),
dateCellStyle, dateFormat);
}
@@ -27,6 +27,7 @@ import java.io.InputStream;
import java.net.URLConnection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDate;
import java.util.Collection;
import javax.ws.rs.core.Response;
import org.apache.fineract.infrastructure.bulkimport.data.BulkImportEvent;
@@ -51,7 +52,6 @@ import org.apache.poi.ss.usermodel.Workbook;
import org.apache.tika.Tika;
import org.apache.tika.io.IOUtils;
import org.apache.tika.io.TikaInputStream;
import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -18,9 +18,9 @@
*/
package org.apache.fineract.infrastructure.campaigns.email.data;
import java.time.LocalDate;
import java.time.ZonedDateTime;
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
public final class EmailCampaignData {
@@ -47,22 +47,22 @@ public final class EmailCampaignData {
@SuppressWarnings("unused")
private final String stretchyReportParamMap;
@SuppressWarnings("unused")
private final DateTime nextTriggerDate;
private final ZonedDateTime nextTriggerDate;
@SuppressWarnings("unused")
private final LocalDate lastTriggerDate;
@SuppressWarnings("unused")
private final EmailCampaignTimeLine emailCampaignTimeLine;
@SuppressWarnings("unused")
private final DateTime recurrenceStartDate;
private final ZonedDateTime recurrenceStartDate;
private final String recurrence;
private EmailCampaignData(final Long id, final String campaignName, final Integer campaignType, final Long businessRuleId,
final String paramValue, final EnumOptionData campaignStatus, final String emailSubject, final String message,
final String emailAttachmentFileFormat, final Long stretchyReportId, final String stretchyReportParamMap,
final DateTime nextTriggerDate, final LocalDate lastTriggerDate, final EmailCampaignTimeLine emailCampaignTimeLine,
final DateTime recurrenceStartDate, final String recurrence) {
final ZonedDateTime nextTriggerDate, final LocalDate lastTriggerDate, final EmailCampaignTimeLine emailCampaignTimeLine,
final ZonedDateTime recurrenceStartDate, final String recurrence) {
this.id = id;
this.campaignName = campaignName;
this.campaignType = campaignType;
@@ -92,8 +92,8 @@ public final class EmailCampaignData {
public static EmailCampaignData instance(final Long id, final String campaignName, final Integer campaignType, final Long runReportId,
final String paramValue, final EnumOptionData campaignStatus, final String emailSubject, final String message,
final String emailAttachmentFileFormat, final Long stretchyReportId, final String stretchyReportParamMap,
final DateTime nextTriggerDate, final LocalDate lastTriggerDate, final EmailCampaignTimeLine emailCampaignTimeLine,
final DateTime recurrenceStartDate, final String recurrence) {
final ZonedDateTime nextTriggerDate, final LocalDate lastTriggerDate, final EmailCampaignTimeLine emailCampaignTimeLine,
final ZonedDateTime recurrenceStartDate, final String recurrence) {
return new EmailCampaignData(id, campaignName, campaignType, runReportId, paramValue, campaignStatus, emailSubject, message,
emailAttachmentFileFormat, stretchyReportId, stretchyReportParamMap, nextTriggerDate, lastTriggerDate,
emailCampaignTimeLine, recurrenceStartDate, recurrence);
@@ -131,7 +131,7 @@ public final class EmailCampaignData {
return this.emailMessage;
}
public DateTime getNextTriggerDate() {
public ZonedDateTime getNextTriggerDate() {
return this.nextTriggerDate;
}
@@ -143,7 +143,7 @@ public final class EmailCampaignData {
return this.recurrence;
}
public DateTime getRecurrenceStartDate() {
public ZonedDateTime getRecurrenceStartDate() {
return this.recurrenceStartDate;
}
}
@@ -18,7 +18,7 @@
*/
package org.apache.fineract.infrastructure.campaigns.email.data;
import org.joda.time.LocalDate;
import java.time.LocalDate;
public class EmailCampaignTimeLine {
@@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.campaigns.email.data;
import com.google.gson.JsonElement;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
@@ -34,7 +35,6 @@ import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder;
import org.apache.fineract.infrastructure.core.exception.InvalidJsonException;
import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException;
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -18,10 +18,10 @@
*/
package org.apache.fineract.infrastructure.campaigns.email.data;
import java.time.LocalDate;
import java.util.List;
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
import org.apache.fineract.infrastructure.dataqueries.data.ReportData;
import org.joda.time.LocalDate;
/**
* Immutable data object representing a SMS message.
@@ -22,6 +22,8 @@ import com.google.common.base.Splitter;
import com.google.gson.JsonElement;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
@@ -41,9 +43,6 @@ import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidati
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
import org.joda.time.LocalDateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -127,7 +126,7 @@ public final class EmailDataValidator {
if (StringUtils.isNotEmpty(dateFormat)) {
try {
final DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(dateFormat).withLocale(jsonCommand.extractLocale());
final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(dateFormat).withLocale(jsonCommand.extractLocale());
// try to parse the date time string
LocalDateTime.parse(startDateTime, dateTimeFormatter);
@@ -224,7 +223,7 @@ public final class EmailDataValidator {
if (StringUtils.isNotEmpty(dateFormat)) {
try {
final DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(dateFormat)
final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(dateFormat)
.withLocale(jsonCommand.extractLocale());
// try to parse the date time string
@@ -18,6 +18,11 @@
*/
package org.apache.fineract.infrastructure.campaigns.email.domain;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedHashMap;
@@ -43,10 +48,6 @@ import org.apache.fineract.infrastructure.core.service.DateUtils;
import org.apache.fineract.infrastructure.dataqueries.domain.Report;
import org.apache.fineract.portfolio.client.api.ClientApiConstants;
import org.apache.fineract.useradministration.domain.AppUser;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
@Entity
@Table(name = "scheduled_email_campaign")
@@ -152,15 +153,15 @@ public class EmailCampaign extends AbstractPersistableCustom {
this.emailAttachmentFileFormat = emailAttachmentFileFormat.getValue();
this.stretchyReport = stretchyReport;
this.stretchyReportParamMap = stretchyReportParamMap;
this.submittedOnDate = submittedOnDate.toDate();
this.submittedOnDate = Date.from(submittedOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
this.submittedBy = submittedBy;
this.recurrence = recurrence;
LocalDateTime recurrenceStartDate = new LocalDateTime();
LocalDateTime recurrenceStartDate = LocalDateTime.now(ZoneId.systemDefault());
this.isVisible = true;
if (localDateTime != null) {
this.recurrenceStartDate = localDateTime.toDate();
this.recurrenceStartDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
} else {
this.recurrenceStartDate = recurrenceStartDate.toDate();
this.recurrenceStartDate = Date.from(recurrenceStartDate.atZone(ZoneId.systemDefault()).toInstant());
}
}
@@ -184,16 +185,16 @@ public class EmailCampaign extends AbstractPersistableCustom {
} else {
emailAttachmentFileFormat = ScheduledEmailAttachmentFileFormat.instance(2);
}
LocalDate submittedOnDate = new LocalDate();
LocalDate submittedOnDate = LocalDate.now(ZoneId.systemDefault());
if (command.hasParameter(EmailCampaignValidator.submittedOnDateParamName)) {
submittedOnDate = command.localDateValueOfParameterNamed(EmailCampaignValidator.submittedOnDateParamName);
}
final String recurrence = command.stringValueOfParameterNamed(EmailCampaignValidator.recurrenceParamName);
final Locale locale = command.extractLocale();
final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale);
final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale);
LocalDateTime recurrenceStartDate = new LocalDateTime();
LocalDateTime recurrenceStartDate = LocalDateTime.now(ZoneId.systemDefault());
if (EmailCampaignType.fromInt(campaignType.intValue()).isSchedule()) {
if (command.hasParameter(EmailCampaignValidator.recurrenceStartDate)) {
recurrenceStartDate = LocalDateTime.parse(command.stringValueOfParameterNamed(EmailCampaignValidator.recurrenceStartDate),
@@ -245,7 +246,7 @@ public class EmailCampaign extends AbstractPersistableCustom {
final String dateFormatAsInput = command.dateFormat();
final String localeAsInput = command.locale();
final Locale locale = command.extractLocale();
final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale);
final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale);
if (command.isChangeInLocalDateParameterNamed(EmailCampaignValidator.recurrenceStartDate, getRecurrenceStartDate())) {
final String valueAsInput = command.stringValueOfParameterNamed(EmailCampaignValidator.recurrenceStartDate);
@@ -255,7 +256,7 @@ public class EmailCampaign extends AbstractPersistableCustom {
final LocalDateTime newValue = LocalDateTime.parse(valueAsInput, fmt);
this.recurrenceStartDate = newValue.toDate();
this.recurrenceStartDate = Date.from(newValue.atZone(ZoneId.systemDefault()).toInstant());
}
return actualChanges;
@@ -267,14 +268,14 @@ public class EmailCampaign extends AbstractPersistableCustom {
// handle errors if already activated
final String defaultUserMessage = "Cannot activate campaign. Campaign is already active.";
final ApiParameterError error = ApiParameterError.parameterError("error.msg.campaign.already.active", defaultUserMessage,
EmailCampaignValidator.activationDateParamName, activationLocalDate.toString(formatter));
EmailCampaignValidator.activationDateParamName, activationLocalDate.format(formatter));
final List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>();
dataValidationErrors.add(error);
throw new PlatformApiDataValidationException(dataValidationErrors);
}
this.approvedOnDate = activationLocalDate.toDate();
this.approvedOnDate = Date.from(activationLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
this.approvedBy = currentUser;
this.status = EmailCampaignStatus.ACTIVE.getValue();
@@ -298,7 +299,7 @@ public class EmailCampaign extends AbstractPersistableCustom {
this.lastTriggerDate = null;
}
this.closedBy = currentUser;
this.closureDate = closureLocalDate.toDate();
this.closureDate = Date.from(closureLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
this.status = EmailCampaignStatus.CLOSED.getValue();
validateClosureDate();
}
@@ -317,7 +318,7 @@ public class EmailCampaign extends AbstractPersistableCustom {
throw new PlatformApiDataValidationException(dataValidationErrors);
}
this.approvedOnDate = reactivateLocalDate.toDate();
this.approvedOnDate = Date.from(reactivateLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
this.status = EmailCampaignStatus.ACTIVE.getValue();
this.approvedBy = currentUser;
this.closureDate = null;
@@ -456,18 +457,18 @@ public class EmailCampaign extends AbstractPersistableCustom {
}
public LocalDate getSubmittedOnDate() {
return ObjectUtils.defaultIfNull(new LocalDate(this.submittedOnDate), null);
return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.submittedOnDate.toInstant(), ZoneId.systemDefault()), null);
}
public LocalDate getClosureDate() {
return ObjectUtils.defaultIfNull(new LocalDate(this.closureDate), null);
return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.closureDate.toInstant(), ZoneId.systemDefault()), null);
}
public LocalDate getActivationLocalDate() {
LocalDate activationLocalDate = null;
if (this.approvedOnDate != null) {
activationLocalDate = LocalDate.fromDateFields(this.approvedOnDate);
activationLocalDate = LocalDate.ofInstant(this.approvedOnDate.toInstant(), ZoneId.systemDefault());
}
return activationLocalDate;
}
@@ -501,11 +502,12 @@ public class EmailCampaign extends AbstractPersistableCustom {
}
public LocalDate getRecurrenceStartDate() {
return ObjectUtils.defaultIfNull(new LocalDate(this.recurrenceStartDate), null);
return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.recurrenceStartDate.toInstant(), ZoneId.systemDefault()), null);
}
public LocalDateTime getRecurrenceStartDateTime() {
return ObjectUtils.defaultIfNull(new LocalDateTime(this.recurrenceStartDate), null);
return ObjectUtils.defaultIfNull(
ZonedDateTime.ofInstant(this.recurrenceStartDate.toInstant(), ZoneId.systemDefault()).toLocalDateTime(), null);
}
public void setLastTriggerDate(Date lastTriggerDate) {
@@ -517,7 +519,8 @@ public class EmailCampaign extends AbstractPersistableCustom {
}
public LocalDateTime getNextTriggerDate() {
return ObjectUtils.defaultIfNull(new LocalDateTime(this.nextTriggerDate), null);
return ObjectUtils
.defaultIfNull(ZonedDateTime.ofInstant(this.nextTriggerDate.toInstant(), ZoneId.systemDefault()).toLocalDateTime(), null);
}
@@ -526,7 +529,7 @@ public class EmailCampaign extends AbstractPersistableCustom {
}
public LocalDate getLastTriggerDate() {
return ObjectUtils.defaultIfNull(new LocalDate(this.lastTriggerDate), null);
return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.lastTriggerDate.toInstant(), ZoneId.systemDefault()), null);
}
public void updateIsVisible(boolean isVisible) {
@@ -18,6 +18,8 @@
*/
package org.apache.fineract.infrastructure.campaigns.email.domain;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -35,7 +37,6 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
import org.apache.fineract.organisation.staff.domain.Staff;
import org.apache.fineract.portfolio.client.domain.Client;
import org.apache.fineract.portfolio.group.domain.Group;
import org.joda.time.LocalDate;
@Entity
@Table(name = "scheduled_email_messages_outbound")
@@ -107,7 +108,7 @@ public class EmailMessage extends AbstractPersistableCustom {
this.emailSubject = emailSubject;
this.message = message;
this.campaignName = campaignName;
this.submittedOnDate = LocalDate.now().toDate();
this.submittedOnDate = Date.from(LocalDate.now(ZoneId.systemDefault()).atStartOfDay(ZoneId.systemDefault()).toInstant());
}
public Map<String, Object> update(final JsonCommand command) {
@@ -20,6 +20,8 @@ package org.apache.fineract.infrastructure.campaigns.email.service;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDate;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -37,8 +39,6 @@ import org.apache.fineract.infrastructure.campaigns.email.exception.EmailCampaig
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
import org.apache.fineract.infrastructure.core.domain.JdbcSupport;
import org.apache.fineract.infrastructure.core.service.RoutingDataSource;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.EmptyResultDataAccessException;
@@ -138,7 +138,7 @@ public class EmailCampaignReadPlatformServiceImpl implements EmailCampaignReadPl
final Integer statusId = JdbcSupport.getInteger(rs, "statusEnum");
final EnumOptionData status = EmailCampaignStatusEnumerations.status(statusId);
final DateTime nextTriggerDate = JdbcSupport.getDateTime(rs, "nextTriggerDate");
final ZonedDateTime nextTriggerDate = JdbcSupport.getDateTime(rs, "nextTriggerDate");
final LocalDate lastTriggerDate = JdbcSupport.getLocalDate(rs, "lastTriggerDate");
final LocalDate closedOnDate = JdbcSupport.getLocalDate(rs, "closedOnDate");
@@ -150,7 +150,7 @@ public class EmailCampaignReadPlatformServiceImpl implements EmailCampaignReadPl
final LocalDate activatedOnDate = JdbcSupport.getLocalDate(rs, "activatedOnDate");
final String activatedByUsername = rs.getString("activatedByUsername");
final String recurrence = rs.getString("recurrence");
final DateTime recurrenceStartDate = JdbcSupport.getDateTime(rs, "recurrenceStartDate");
final ZonedDateTime recurrenceStartDate = JdbcSupport.getDateTime(rs, "recurrenceStartDate");
final EmailCampaignTimeLine emailCampaignTimeLine = new EmailCampaignTimeLine(submittedOnDate, submittedByUsername,
activatedOnDate, activatedByUsername, closedOnDate, closedByUsername);
@@ -28,9 +28,15 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -85,11 +91,6 @@ import org.apache.fineract.portfolio.savings.domain.SavingsAccountRepository;
import org.apache.fineract.useradministration.domain.AppUser;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
import org.joda.time.DateTimeZone;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -313,7 +314,7 @@ public class EmailCampaignWritePlatformCommandHandlerImpl implements EmailCampai
final EmailCampaign emailCampaign = this.emailCampaignRepository.findById(campaignId)
.orElseThrow(() -> new EmailCampaignNotFound(campaignId));
LocalDateTime nextTriggerDate = emailCampaign.getNextTriggerDate();
emailCampaign.setLastTriggerDate(nextTriggerDate.toDate());
emailCampaign.setLastTriggerDate(Date.from(nextTriggerDate.atZone(ZoneId.systemDefault()).toInstant()));
// calculate new trigger date and insert into next trigger date
/**
@@ -335,12 +336,11 @@ public class EmailCampaignWritePlatformCommandHandlerImpl implements EmailCampai
emailCampaign.getNextTriggerDate().toLocalDate(), DateUtils.getLocalDateOfTenant());
}
final LocalDateTime getTime = emailCampaign.getRecurrenceStartDateTime();
final String dateString = nextRuntime.toString() + " " + getTime.getHourOfDay() + ":" + getTime.getMinuteOfHour() + ":"
+ getTime.getSecondOfMinute();
final DateTimeFormatter simpleDateFormat = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
final String dateString = nextRuntime.toString() + " " + getTime.getHour() + ":" + getTime.getMinute() + ":" + getTime.getSecond();
final DateTimeFormatter simpleDateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
final LocalDateTime newTriggerDateWithTime = LocalDateTime.parse(dateString, simpleDateFormat);
emailCampaign.setNextTriggerDate(newTriggerDateWithTime.toDate());
emailCampaign.setNextTriggerDate(Date.from(newTriggerDateWithTime.atZone(ZoneId.systemDefault()).toInstant()));
this.emailCampaignRepository.saveAndFlush(emailCampaign);
}
@@ -355,7 +355,7 @@ public class EmailCampaignWritePlatformCommandHandlerImpl implements EmailCampai
.orElseThrow(() -> new EmailCampaignNotFound(campaignId));
final Locale locale = command.extractLocale();
final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale);
final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale);
final LocalDate activationDate = command.localDateValueOfParameterNamed("activationDate");
emailCampaign.activate(currentUser, fmt, activationDate);
@@ -382,12 +382,13 @@ public class EmailCampaignWritePlatformCommandHandlerImpl implements EmailCampai
// to get time of tenant
final LocalDateTime getTime = emailCampaign.getRecurrenceStartDateTime();
final String dateString = nextTriggerDate.toString() + " " + getTime.getHourOfDay() + ":" + getTime.getMinuteOfHour() + ":"
+ getTime.getSecondOfMinute();
final DateTimeFormatter simpleDateFormat = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
final String dateString = nextTriggerDate.toString() + " " + getTime.getHour() + ":" + getTime.getMinute() + ":"
+ getTime.getSecond();
final DateTimeFormatter simpleDateFormat = new DateTimeFormatterBuilder().parseCaseInsensitive().parseLenient()
.appendPattern("yyyy-MM-dd HH:mm:ss").toFormatter();
final LocalDateTime nextTriggerDateWithTime = LocalDateTime.parse(dateString, simpleDateFormat);
emailCampaign.setNextTriggerDate(nextTriggerDateWithTime.toDate());
emailCampaign.setNextTriggerDate(Date.from(nextTriggerDateWithTime.atZone(ZoneId.systemDefault()).toInstant()));
this.emailCampaignRepository.saveAndFlush(emailCampaign);
}
}
@@ -413,7 +414,7 @@ public class EmailCampaignWritePlatformCommandHandlerImpl implements EmailCampai
.orElseThrow(() -> new EmailCampaignNotFound(campaignId));
final Locale locale = command.extractLocale();
final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale);
final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale);
final LocalDate closureDate = command.localDateValueOfParameterNamed("closureDate");
emailCampaign.close(currentUser, fmt, closureDate);
@@ -513,7 +514,7 @@ public class EmailCampaignWritePlatformCommandHandlerImpl implements EmailCampai
.orElseThrow(() -> new EmailCampaignNotFound(campaignId));
final Locale locale = command.extractLocale();
final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale);
final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale);
final LocalDate reactivationDate = command.localDateValueOfParameterNamed("activationDate");
emailCampaign.reactivate(currentUser, fmt, reactivationDate);
if (emailCampaign.isSchedule()) {
@@ -532,12 +533,13 @@ public class EmailCampaignWritePlatformCommandHandlerImpl implements EmailCampai
// to get time of tenant
final LocalDateTime getTime = emailCampaign.getRecurrenceStartDateTime();
final String dateString = nextTriggerDate.toString() + " " + getTime.getHourOfDay() + ":" + getTime.getMinuteOfHour() + ":"
+ getTime.getSecondOfMinute();
final DateTimeFormatter simpleDateFormat = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
final String dateString = nextTriggerDate.toString() + " " + getTime.getHour() + ":" + getTime.getMinute() + ":"
+ getTime.getSecond();
final DateTimeFormatter simpleDateFormat = new DateTimeFormatterBuilder().parseCaseInsensitive().parseLenient()
.appendPattern("yyyy-MM-dd HH:mm:ss").toFormatter();
final LocalDateTime nextTriggerDateWithTime = LocalDateTime.parse(dateString, simpleDateFormat);
emailCampaign.setNextTriggerDate(nextTriggerDateWithTime.toDate());
emailCampaign.setNextTriggerDate(Date.from(nextTriggerDateWithTime.atZone(ZoneId.systemDefault()).toInstant()));
this.emailCampaignRepository.saveAndFlush(emailCampaign);
}
@@ -555,13 +557,13 @@ public class EmailCampaignWritePlatformCommandHandlerImpl implements EmailCampai
}
private LocalDateTime tenantDateTime() {
LocalDateTime today = new LocalDateTime();
LocalDateTime today = LocalDateTime.now(ZoneId.systemDefault());
final FineractPlatformTenant tenant = ThreadLocalContextUtil.getTenant();
if (tenant != null) {
final DateTimeZone zone = DateTimeZone.forID(tenant.getTimezoneId());
final ZoneId zone = ZoneId.of(tenant.getTimezoneId());
if (zone != null) {
today = new LocalDateTime(zone);
today = LocalDateTime.now(zone);
}
}
return today;
@@ -22,6 +22,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.Collection;
import java.util.Date;
import java.util.List;
@@ -35,7 +36,6 @@ import org.apache.fineract.infrastructure.core.service.Page;
import org.apache.fineract.infrastructure.core.service.PaginationHelper;
import org.apache.fineract.infrastructure.core.service.RoutingDataSource;
import org.apache.fineract.infrastructure.core.service.SearchParameters;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
@@ -18,10 +18,10 @@
*/
package org.apache.fineract.infrastructure.campaigns.sms.data;
import java.time.LocalDate;
import java.time.ZonedDateTime;
import java.util.Collection;
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
@SuppressWarnings("unused")
public final class SmsCampaignData {
@@ -35,10 +35,10 @@ public final class SmsCampaignData {
private final EnumOptionData campaignStatus;
private final EnumOptionData triggerType;
private final String campaignMessage;
private final DateTime nextTriggerDate;
private final ZonedDateTime nextTriggerDate;
private final LocalDate lastTriggerDate;
private final SmsCampaignTimeLine smsCampaignTimeLine;
private final DateTime recurrenceStartDate;
private final ZonedDateTime recurrenceStartDate;
private final String recurrence;
private final Long providerId;
private final boolean isNotification;
@@ -61,8 +61,8 @@ public final class SmsCampaignData {
private SmsCampaignData(final Long id, final String campaignName, final EnumOptionData campaignType, final EnumOptionData triggerType,
final Long runReportId, final String reportName, final String paramValue, final EnumOptionData campaignStatus,
final String message, final DateTime nextTriggerDate, final LocalDate lastTriggerDate,
final SmsCampaignTimeLine smsCampaignTimeLine, final DateTime recurrenceStartDate, final String recurrence,
final String message, final ZonedDateTime nextTriggerDate, final LocalDate lastTriggerDate,
final SmsCampaignTimeLine smsCampaignTimeLine, final ZonedDateTime recurrenceStartDate, final String recurrence,
final Long providerId, final Collection<SmsBusinessRulesData> businessRulesOptions,
final Collection<SmsProviderData> smsProviderOptions, final Collection<EnumOptionData> campaignTypeOptions,
final Collection<EnumOptionData> triggerTypeOptions, final Collection<EnumOptionData> months,
@@ -104,8 +104,8 @@ public final class SmsCampaignData {
public static SmsCampaignData instance(final Long id, final String campaignName, final EnumOptionData campaignType,
final EnumOptionData triggerType, final Long runReportId, final String reportName, final String paramValue,
final EnumOptionData campaignStatus, final String message, final DateTime nextTriggerDate, final LocalDate lastTriggerDate,
final SmsCampaignTimeLine smsCampaignTimeLine, final DateTime recurrenceStartDate, final String recurrence,
final EnumOptionData campaignStatus, final String message, final ZonedDateTime nextTriggerDate, final LocalDate lastTriggerDate,
final SmsCampaignTimeLine smsCampaignTimeLine, final ZonedDateTime recurrenceStartDate, final String recurrence,
final Long providerId, final boolean isNotification) {
final Collection<SmsBusinessRulesData> businessRulesOptions = null;
final Collection<SmsProviderData> smsProviderOptions = null;
@@ -134,10 +134,10 @@ public final class SmsCampaignData {
final String paramValue = null;
final EnumOptionData campaignStatus = null;
final String message = null;
final DateTime nextTriggerDate = null;
final ZonedDateTime nextTriggerDate = null;
final LocalDate lastTriggerDate = null;
final SmsCampaignTimeLine smsCampaignTimeLine = null;
final DateTime recurrenceStartDate = null;
final ZonedDateTime recurrenceStartDate = null;
final String recurrence = null;
final EnumOptionData triggerType = null;
final String reportName = null;
@@ -177,7 +177,7 @@ public final class SmsCampaignData {
return this.campaignMessage;
}
public DateTime getNextTriggerDate() {
public ZonedDateTime getNextTriggerDate() {
return this.nextTriggerDate;
}
@@ -189,7 +189,7 @@ public final class SmsCampaignData {
return this.recurrence;
}
public DateTime getRecurrenceStartDate() {
public ZonedDateTime getRecurrenceStartDate() {
return this.recurrenceStartDate;
}
@@ -18,7 +18,7 @@
*/
package org.apache.fineract.infrastructure.campaigns.sms.data;
import org.joda.time.LocalDate;
import java.time.LocalDate;
@SuppressWarnings("unused")
public class SmsCampaignTimeLine {
@@ -18,6 +18,11 @@
*/
package org.apache.fineract.infrastructure.campaigns.sms.domain;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedHashMap;
@@ -47,10 +52,6 @@ import org.apache.fineract.infrastructure.dataqueries.domain.Report;
import org.apache.fineract.portfolio.calendar.domain.CalendarFrequencyType;
import org.apache.fineract.portfolio.calendar.domain.CalendarWeekDaysType;
import org.apache.fineract.useradministration.domain.AppUser;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
@Entity
@Table(name = "sms_campaign", uniqueConstraints = { @UniqueConstraint(columnNames = { "campaign_name" }, name = "campaign_name_UNIQUE") })
@@ -139,15 +140,15 @@ public class SmsCampaign extends AbstractPersistableCustom {
this.paramValue = paramValue;
this.status = SmsCampaignStatus.PENDING.getValue();
this.message = message;
this.submittedOnDate = submittedOnDate.toDate();
this.submittedOnDate = Date.from(submittedOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
this.submittedBy = submittedBy;
this.recurrence = recurrence;
LocalDateTime recurrenceStartDate = new LocalDateTime();
LocalDateTime recurrenceStartDate = LocalDateTime.now(ZoneId.systemDefault());
this.isVisible = true;
if (localDateTime != null) {
this.recurrenceStartDate = localDateTime.toDate();
this.recurrenceStartDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
} else {
this.recurrenceStartDate = recurrenceStartDate.toDate();
this.recurrenceStartDate = Date.from(recurrenceStartDate.atZone(ZoneId.systemDefault()).toInstant());
}
this.isNotification = isNotification;
}
@@ -169,19 +170,19 @@ public class SmsCampaign extends AbstractPersistableCustom {
final String paramValue = command.jsonFragment(SmsCampaignValidator.paramValue);
final String message = command.stringValueOfParameterNamed(SmsCampaignValidator.message);
LocalDate submittedOnDate = new LocalDate();
LocalDate submittedOnDate = LocalDate.now(ZoneId.systemDefault());
if (command.hasParameter(SmsCampaignValidator.submittedOnDateParamName)) {
submittedOnDate = command.localDateValueOfParameterNamed(SmsCampaignValidator.submittedOnDateParamName);
}
String recurrence = null;
LocalDateTime recurrenceStartDate = new LocalDateTime();
LocalDateTime recurrenceStartDate = LocalDateTime.now(ZoneId.systemDefault());
if (SmsCampaignTriggerType.fromInt(triggerType.intValue()).isSchedule()) {
final Locale locale = command.extractLocale();
String dateTimeFormat = null;
if (command.hasParameter(SmsCampaignValidator.dateTimeFormat)) {
dateTimeFormat = command.stringValueOfParameterNamed(SmsCampaignValidator.dateTimeFormat);
final DateTimeFormatter fmt = DateTimeFormat.forPattern(dateTimeFormat).withLocale(locale);
final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(dateTimeFormat).withLocale(locale);
if (command.hasParameter(SmsCampaignValidator.recurrenceStartDate)) {
recurrenceStartDate = LocalDateTime.parse(command.stringValueOfParameterNamed(SmsCampaignValidator.recurrenceStartDate),
fmt);
@@ -252,7 +253,7 @@ public class SmsCampaign extends AbstractPersistableCustom {
final String dateTimeFormatAsInput = command.stringValueOfParameterNamed(SmsCampaignValidator.dateTimeFormat);
final String localeAsInput = command.locale();
final Locale locale = command.extractLocale();
final DateTimeFormatter fmt = DateTimeFormat.forPattern(dateTimeFormatAsInput).withLocale(locale);
final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(dateTimeFormatAsInput).withLocale(locale);
final String valueAsInput = command.stringValueOfParameterNamed(SmsCampaignValidator.recurrenceStartDate);
actualChanges.put(SmsCampaignValidator.recurrenceStartDate, valueAsInput);
actualChanges.put(SmsCampaignValidator.dateFormatParamName, dateFormatAsInput);
@@ -261,7 +262,7 @@ public class SmsCampaign extends AbstractPersistableCustom {
final LocalDateTime newValue = LocalDateTime.parse(valueAsInput, fmt);
this.recurrenceStartDate = newValue.toDate();
this.recurrenceStartDate = Date.from(newValue.atZone(ZoneId.systemDefault()).toInstant());
}
return actualChanges;
@@ -273,14 +274,14 @@ public class SmsCampaign extends AbstractPersistableCustom {
// handle errors if already activated
final String defaultUserMessage = "Cannot activate campaign. Campaign is already active.";
final ApiParameterError error = ApiParameterError.parameterError("error.msg.campaign.already.active", defaultUserMessage,
SmsCampaignValidator.activationDateParamName, activationLocalDate.toString(formatter));
SmsCampaignValidator.activationDateParamName, activationLocalDate.format(formatter));
final List<ApiParameterError> dataValidationErrors = new ArrayList<>();
dataValidationErrors.add(error);
throw new PlatformApiDataValidationException(dataValidationErrors);
}
this.approvedOnDate = activationLocalDate.toDate();
this.approvedOnDate = Date.from(activationLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
this.approvedBy = currentUser;
this.status = SmsCampaignStatus.ACTIVE.getValue();
@@ -304,7 +305,7 @@ public class SmsCampaign extends AbstractPersistableCustom {
this.lastTriggerDate = null;
}
this.closedBy = currentUser;
this.closureDate = closureLocalDate.toDate();
this.closureDate = Date.from(closureLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
this.status = SmsCampaignStatus.CLOSED.getValue();
validateClosureDate();
}
@@ -323,7 +324,7 @@ public class SmsCampaign extends AbstractPersistableCustom {
throw new PlatformApiDataValidationException(dataValidationErrors);
}
this.approvedOnDate = reactivateLocalDate.toDate();
this.approvedOnDate = Date.from(reactivateLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
this.status = SmsCampaignStatus.ACTIVE.getValue();
this.approvedBy = currentUser;
this.closureDate = null;
@@ -466,18 +467,18 @@ public class SmsCampaign extends AbstractPersistableCustom {
}
public LocalDate getSubmittedOnDate() {
return ObjectUtils.defaultIfNull(new LocalDate(this.submittedOnDate), null);
return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.submittedOnDate.toInstant(), ZoneId.systemDefault()), null);
}
public LocalDate getClosureDate() {
return ObjectUtils.defaultIfNull(new LocalDate(this.closureDate), null);
return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.closureDate.toInstant(), ZoneId.systemDefault()), null);
}
public LocalDate getActivationLocalDate() {
LocalDate activationLocalDate = null;
if (this.approvedOnDate != null) {
activationLocalDate = LocalDate.fromDateFields(this.approvedOnDate);
activationLocalDate = LocalDate.ofInstant(this.approvedOnDate.toInstant(), ZoneId.systemDefault());
}
return activationLocalDate;
}
@@ -507,11 +508,12 @@ public class SmsCampaign extends AbstractPersistableCustom {
}
public LocalDate getRecurrenceStartDate() {
return ObjectUtils.defaultIfNull(new LocalDate(this.recurrenceStartDate), null);
return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.recurrenceStartDate.toInstant(), ZoneId.systemDefault()), null);
}
public LocalDateTime getRecurrenceStartDateTime() {
return ObjectUtils.defaultIfNull(new LocalDateTime(this.recurrenceStartDate), null);
return ObjectUtils.defaultIfNull(
ZonedDateTime.ofInstant(this.recurrenceStartDate.toInstant(), ZoneId.systemDefault()).toLocalDateTime(), null);
}
public void setLastTriggerDate(Date lastTriggerDate) {
@@ -523,7 +525,8 @@ public class SmsCampaign extends AbstractPersistableCustom {
}
public LocalDateTime getNextTriggerDate() {
return ObjectUtils.defaultIfNull(new LocalDateTime(this.nextTriggerDate), null);
return ObjectUtils
.defaultIfNull(ZonedDateTime.ofInstant(this.nextTriggerDate.toInstant(), ZoneId.systemDefault()).toLocalDateTime(), null);
}
@@ -532,7 +535,7 @@ public class SmsCampaign extends AbstractPersistableCustom {
}
public LocalDate getLastTriggerDate() {
return ObjectUtils.defaultIfNull(new LocalDate(this.lastTriggerDate), null);
return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.lastTriggerDate.toInstant(), ZoneId.systemDefault()), null);
}
public void updateIsVisible(boolean isVisible) {
@@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.campaigns.sms.serialization;
import com.google.gson.JsonElement;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
@@ -39,7 +40,6 @@ import org.apache.fineract.infrastructure.gcm.domain.DeviceRegistration;
import org.apache.fineract.infrastructure.gcm.domain.DeviceRegistrationRepositoryWrapper;
import org.apache.fineract.portfolio.calendar.domain.CalendarFrequencyType;
import org.apache.fineract.portfolio.client.domain.Client;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.campaigns.sms.service;
import java.io.IOException;
import java.security.InvalidParameterException;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -54,8 +55,6 @@ import org.apache.fineract.portfolio.savings.domain.SavingsAccount;
import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -312,8 +311,8 @@ public class SmsCampaignDomainServiceImpl implements SmsCampaignDomainService {
throw new InvalidParameterException("");
}
DateTimeFormatter timeFormatter = DateTimeFormat.forPattern("HH:mm");
DateTimeFormatter dateFormatter = DateTimeFormat.forPattern("MMM:d:yyyy");
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm");
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MMM:d:yyyy");
smsParams.put("id", loanTransaction.getLoan().getClientId());
smsParams.put("firstname", client.getFirstname());
@@ -334,8 +333,8 @@ public class SmsCampaignDomainServiceImpl implements SmsCampaignDomainService {
}
smsParams.put("repaymentAmount", loanTransaction.getAmount(loan.getCurrency()));
smsParams.put("RepaymentDate", loanTransaction.getCreatedDateTime().toLocalDate().toString(dateFormatter));
smsParams.put("RepaymentTime", loanTransaction.getCreatedDateTime().toLocalTime().toString(timeFormatter));
smsParams.put("RepaymentDate", loanTransaction.getCreatedDateTime().toLocalDate().format(dateFormatter));
smsParams.put("RepaymentTime", loanTransaction.getCreatedDateTime().toLocalTime().format(timeFormatter));
if (loanTransaction.getPaymentDetail() != null) {
smsParams.put("receiptNumber", loanTransaction.getPaymentDetail().getReceiptNumber());
@@ -355,7 +354,7 @@ public class SmsCampaignDomainServiceImpl implements SmsCampaignDomainService {
// transactionDate
HashMap<String, Object> smsParams = new HashMap<String, Object>();
SavingsAccount savingsAccount = savingsAccountTransaction.getSavingsAccount();
DateTimeFormatter dateFormatter = DateTimeFormat.forPattern("MMM:d:yyyy");
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MMM:d:yyyy");
smsParams.put("clientId", client.getId());
smsParams.put("firstname", client.getFirstname());
smsParams.put("middlename", client.getMiddlename());
@@ -368,7 +367,7 @@ public class SmsCampaignDomainServiceImpl implements SmsCampaignDomainService {
smsParams.put("depositAmount", savingsAccountTransaction.getAmount(savingsAccount.getCurrency()));
smsParams.put("balance", savingsAccount.getWithdrawableBalance());
smsParams.put("officeId", client.getOffice().getId());
smsParams.put("transactionDate", savingsAccountTransaction.getTransactionLocalDate().toString(dateFormatter));
smsParams.put("transactionDate", savingsAccountTransaction.getTransactionLocalDate().format(dateFormatter));
smsParams.put("savingsTransactionId", savingsAccountTransaction.getId());
if (client.getStaff() != null) {
@@ -20,6 +20,8 @@ package org.apache.fineract.infrastructure.campaigns.sms.service;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDate;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -41,8 +43,6 @@ import org.apache.fineract.infrastructure.core.service.PaginationHelper;
import org.apache.fineract.infrastructure.core.service.RoutingDataSource;
import org.apache.fineract.infrastructure.core.service.SearchParameters;
import org.apache.fineract.portfolio.calendar.service.CalendarDropdownReadPlatformService;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.EmptyResultDataAccessException;
@@ -250,7 +250,7 @@ public class SmsCampaignReadPlatformServiceImpl implements SmsCampaignReadPlatfo
final Integer triggerType = JdbcSupport.getInteger(rs, "triggerType");
final EnumOptionData triggerTypeEnum = SmsCampaignTriggerType.triggerType(triggerType);
final DateTime nextTriggerDate = JdbcSupport.getDateTime(rs, "nextTriggerDate");
final ZonedDateTime nextTriggerDate = JdbcSupport.getDateTime(rs, "nextTriggerDate");
final LocalDate lastTriggerDate = JdbcSupport.getLocalDate(rs, "lastTriggerDate");
final LocalDate closedOnDate = JdbcSupport.getLocalDate(rs, "closedOnDate");
@@ -262,7 +262,7 @@ public class SmsCampaignReadPlatformServiceImpl implements SmsCampaignReadPlatfo
final LocalDate activatedOnDate = JdbcSupport.getLocalDate(rs, "activatedOnDate");
final String activatedByUsername = rs.getString("activatedByUsername");
final String recurrence = rs.getString("recurrence");
final DateTime recurrenceStartDate = JdbcSupport.getDateTime(rs, "recurrenceStartDate");
final ZonedDateTime recurrenceStartDate = JdbcSupport.getDateTime(rs, "recurrenceStartDate");
final SmsCampaignTimeLine smsCampaignTimeLine = new SmsCampaignTimeLine(submittedOnDate, submittedByUsername, activatedOnDate,
activatedByUsername, closedOnDate, closedByUsername);
final String reportName = rs.getString("reportName");
@@ -25,8 +25,14 @@ import com.google.gson.JsonElement;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -80,11 +86,6 @@ import org.apache.fineract.useradministration.domain.AppUser;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
import org.joda.time.DateTimeZone;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -408,7 +409,7 @@ public class SmsCampaignWritePlatformServiceJpaImpl implements SmsCampaignWriteP
final SmsCampaign smsCampaign = this.smsCampaignRepository.findById(campaignId)
.orElseThrow(() -> new SmsCampaignNotFound(campaignId));
LocalDateTime nextTriggerDate = smsCampaign.getNextTriggerDate();
smsCampaign.setLastTriggerDate(nextTriggerDate.toDate());
smsCampaign.setLastTriggerDate(Date.from(nextTriggerDate.atZone(ZoneId.systemDefault()).toInstant()));
// calculate new trigger date and insert into next trigger date
/**
@@ -430,12 +431,12 @@ public class SmsCampaignWritePlatformServiceJpaImpl implements SmsCampaignWriteP
DateUtils.getLocalDateOfTenant());
}
final LocalDateTime getTime = smsCampaign.getRecurrenceStartDateTime();
final String dateString = nextRuntime.toString() + " " + getTime.getHourOfDay() + ":" + getTime.getMinuteOfHour() + ":"
+ getTime.getSecondOfMinute();
final DateTimeFormatter simpleDateFormat = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
final String dateString = nextRuntime.toString() + " " + getTime.getHour() + ":" + getTime.getMinute() + ":" + getTime.getSecond();
final DateTimeFormatter simpleDateFormat = new DateTimeFormatterBuilder().parseCaseInsensitive().parseLenient()
.appendPattern("yyyy-MM-dd HH:mm:ss").toFormatter();
final LocalDateTime newTriggerDateWithTime = LocalDateTime.parse(dateString, simpleDateFormat);
smsCampaign.setNextTriggerDate(newTriggerDateWithTime.toDate());
smsCampaign.setNextTriggerDate(Date.from(newTriggerDateWithTime.atZone(ZoneId.systemDefault()).toInstant()));
this.smsCampaignRepository.saveAndFlush(smsCampaign);
}
@@ -450,7 +451,7 @@ public class SmsCampaignWritePlatformServiceJpaImpl implements SmsCampaignWriteP
.orElseThrow(() -> new SmsCampaignNotFound(campaignId));
final Locale locale = command.extractLocale();
final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale);
final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale);
final LocalDate activationDate = command.localDateValueOfParameterNamed("activationDate");
smsCampaign.activate(currentUser, fmt, activationDate);
@@ -475,12 +476,13 @@ public class SmsCampaignWritePlatformServiceJpaImpl implements SmsCampaignWriteP
// to get time of tenant
final LocalDateTime getTime = smsCampaign.getRecurrenceStartDateTime();
final String dateString = nextTriggerDate.toString() + " " + getTime.getHourOfDay() + ":" + getTime.getMinuteOfHour() + ":"
+ getTime.getSecondOfMinute();
final DateTimeFormatter simpleDateFormat = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
final String dateString = nextTriggerDate.toString() + " " + getTime.getHour() + ":" + getTime.getMinute() + ":"
+ getTime.getSecond();
final DateTimeFormatter simpleDateFormat = new DateTimeFormatterBuilder().parseCaseInsensitive().parseLenient()
.appendPattern("yyyy-MM-dd HH:mm:ss").toFormatter();
final LocalDateTime nextTriggerDateWithTime = LocalDateTime.parse(dateString, simpleDateFormat);
smsCampaign.setNextTriggerDate(nextTriggerDateWithTime.toDate());
smsCampaign.setNextTriggerDate(Date.from(nextTriggerDateWithTime.atZone(ZoneId.systemDefault()).toInstant()));
this.smsCampaignRepository.saveAndFlush(smsCampaign);
}
@@ -505,7 +507,7 @@ public class SmsCampaignWritePlatformServiceJpaImpl implements SmsCampaignWriteP
.orElseThrow(() -> new SmsCampaignNotFound(campaignId));
final Locale locale = command.extractLocale();
final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale);
final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale);
final LocalDate closureDate = command.localDateValueOfParameterNamed("closureDate");
smsCampaign.close(currentUser, fmt, closureDate);
@@ -616,7 +618,7 @@ public class SmsCampaignWritePlatformServiceJpaImpl implements SmsCampaignWriteP
.orElseThrow(() -> new SmsCampaignNotFound(campaignId));
final Locale locale = command.extractLocale();
final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale);
final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale);
final LocalDate reactivationDate = command.localDateValueOfParameterNamed("activationDate");
smsCampaign.reactivate(currentUser, fmt, reactivationDate);
if (smsCampaign.isDirect()) {
@@ -637,12 +639,13 @@ public class SmsCampaignWritePlatformServiceJpaImpl implements SmsCampaignWriteP
// to get time of tenant
final LocalDateTime getTime = smsCampaign.getRecurrenceStartDateTime();
final String dateString = nextTriggerDate.toString() + " " + getTime.getHourOfDay() + ":" + getTime.getMinuteOfHour() + ":"
+ getTime.getSecondOfMinute();
final DateTimeFormatter simpleDateFormat = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
final String dateString = nextTriggerDate.toString() + " " + getTime.getHour() + ":" + getTime.getMinute() + ":"
+ getTime.getSecond();
final DateTimeFormatter simpleDateFormat = new DateTimeFormatterBuilder().parseCaseInsensitive().parseLenient()
.appendPattern("yyyy-MM-dd HH:mm:ss").toFormatter();
final LocalDateTime nextTriggerDateWithTime = LocalDateTime.parse(dateString, simpleDateFormat);
smsCampaign.setNextTriggerDate(nextTriggerDateWithTime.toDate());
smsCampaign.setNextTriggerDate(Date.from(nextTriggerDateWithTime.atZone(ZoneId.systemDefault()).toInstant()));
}
this.smsCampaignRepository.saveAndFlush(smsCampaign);
@@ -679,13 +682,13 @@ public class SmsCampaignWritePlatformServiceJpaImpl implements SmsCampaignWriteP
}
private LocalDateTime tenantDateTime() {
LocalDateTime today = new LocalDateTime();
LocalDateTime today = LocalDateTime.now(ZoneId.systemDefault());
final FineractPlatformTenant tenant = ThreadLocalContextUtil.getTenant();
if (tenant != null) {
final DateTimeZone zone = DateTimeZone.forID(tenant.getTimezoneId());
final ZoneId zone = ZoneId.of(tenant.getTimezoneId());
if (zone != null) {
today = new LocalDateTime(zone);
today = LocalDateTime.now(zone);
}
}
return today;
@@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.configuration.data;
import com.google.gson.JsonElement;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
@@ -35,7 +36,6 @@ import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder;
import org.apache.fineract.infrastructure.core.exception.InvalidJsonException;
import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException;
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -23,19 +23,20 @@ import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import java.lang.reflect.Type;
import org.joda.time.DateTime;
import java.time.ZonedDateTime;
/**
* Serializer for Joda Time {@link DateTime} that returns the date as long to match previous (Jackson) functionality.
* Serializer for Joda Time {@link ZonedDateTime} that returns the date as long to match previous (Jackson)
* functionality.
*/
public class JodaDateTimeAdapter implements JsonSerializer<DateTime> {
public class JodaDateTimeAdapter implements JsonSerializer<ZonedDateTime> {
@Override
@SuppressWarnings("unused")
public JsonElement serialize(final DateTime src, final Type typeOfSrc, final JsonSerializationContext context) {
public JsonElement serialize(final ZonedDateTime src, final Type typeOfSrc, final JsonSerializationContext context) {
JsonElement element = null;
if (src != null) {
element = new JsonPrimitive(src.getMillis());
element = new JsonPrimitive(src.toInstant().toEpochMilli());
}
return element;
@@ -24,7 +24,8 @@ import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import java.lang.reflect.Type;
import org.joda.time.LocalDate;
import java.time.LocalDate;
import java.time.temporal.ChronoField;
/**
* Serializer for Joda Time {@link LocalDate} that returns the date in array format to match previous Jackson
@@ -38,8 +39,8 @@ public class JodaLocalDateAdapter implements JsonSerializer<LocalDate> {
JsonArray array = null;
if (src != null) {
array = new JsonArray();
array.add(new JsonPrimitive(src.getYearOfEra()));
array.add(new JsonPrimitive(src.getMonthOfYear()));
array.add(new JsonPrimitive(src.get(ChronoField.YEAR_OF_ERA)));
array.add(new JsonPrimitive(src.getMonthValue()));
array.add(new JsonPrimitive(src.getDayOfMonth()));
}
return array;
@@ -18,13 +18,15 @@
*/
package org.apache.fineract.infrastructure.core.api;
import static java.time.temporal.ChronoField.MONTH_OF_YEAR;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import java.lang.reflect.Type;
import org.joda.time.MonthDay;
import java.time.MonthDay;
/**
* Serializer for Joda Time {@link MonthDay} that returns the date in array format to match previous Jackson
@@ -38,7 +40,7 @@ public class JodaMonthDayAdapter implements JsonSerializer<MonthDay> {
JsonArray array = null;
if (src != null) {
array = new JsonArray();
array.add(new JsonPrimitive(src.getMonthOfYear()));
array.add(new JsonPrimitive(src.get(MONTH_OF_YEAR)));
array.add(new JsonPrimitive(src.getDayOfMonth()));
}
return array;
@@ -23,6 +23,11 @@ import com.google.gson.JsonElement;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.MonthDay;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.Date;
import java.util.Locale;
@@ -34,11 +39,6 @@ import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
import org.apache.fineract.infrastructure.security.domain.BasicPasswordEncodablePlatformUser;
import org.apache.fineract.infrastructure.security.domain.PlatformUser;
import org.apache.fineract.infrastructure.security.service.PlatformPasswordEncoder;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import org.joda.time.MonthDay;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
/**
* Immutable representation of a command.
@@ -368,7 +368,7 @@ public final class JsonCommand {
public boolean isChangeInDateParameterNamed(final String parameterName, final Date existingValue) {
LocalDate localDate = null;
if (existingValue != null) {
localDate = LocalDate.fromDateFields(existingValue);
localDate = LocalDate.ofInstant(existingValue.toInstant(), ZoneId.systemDefault());
}
return isChangeInLocalDateParameterNamed(parameterName, localDate);
}
@@ -376,7 +376,7 @@ public final class JsonCommand {
public boolean isChangeInTimeParameterNamed(final String parameterName, final Date existingValue, final String timeFormat) {
LocalDateTime time = null;
if (existingValue != null) {
DateTimeFormatter timeFormtter = DateTimeFormat.forPattern(timeFormat);
DateTimeFormatter timeFormtter = DateTimeFormatter.ofPattern(timeFormat);
time = LocalDateTime.parse(existingValue.toString(), timeFormtter);
}
return isChangeInLocalTimeParameterNamed(parameterName, time);
@@ -417,7 +417,7 @@ public final class JsonCommand {
if (localDate == null) {
return null;
}
return localDate.toDateTimeAtStartOfDay().toDate();
return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
}
public boolean isChangeInStringParameterNamed(final String parameterName, final String existingValue) {
@@ -22,6 +22,7 @@ import com.google.gson.JsonElement;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.Map;
import org.apache.commons.lang3.ObjectUtils;
@@ -30,7 +31,6 @@ import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
import org.apache.fineract.infrastructure.security.domain.BasicPasswordEncodablePlatformUser;
import org.apache.fineract.infrastructure.security.domain.PlatformUser;
import org.apache.fineract.infrastructure.security.service.PlatformPasswordEncoder;
import org.joda.time.LocalDate;
/**
* Immutable representation of a query.
@@ -22,6 +22,7 @@ import com.google.common.base.Splitter;
import com.google.gson.JsonArray;
import java.math.BigDecimal;
import java.text.ParseException;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -32,7 +33,6 @@ import net.fortuna.ical4j.model.property.RRule;
import net.fortuna.ical4j.validate.ValidationException;
import org.apache.commons.lang3.StringUtils;
import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException;
import org.joda.time.LocalDate;
import org.quartz.CronExpression;
import org.springframework.util.ObjectUtils;
@@ -24,10 +24,11 @@ import java.math.BigDecimal;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.joda.time.LocalTime;
import org.springframework.jdbc.support.JdbcUtils;
/**
@@ -40,38 +41,38 @@ public final class JdbcSupport {
}
public static DateTime getDateTime(final ResultSet rs, final String columnName) throws SQLException {
DateTime dateTime = null;
public static ZonedDateTime getDateTime(final ResultSet rs, final String columnName) throws SQLException {
ZonedDateTime dateTime = null;
final Timestamp dateValue = rs.getTimestamp(columnName);
if (dateValue != null) {
dateTime = new DateTime(dateValue.getTime());
dateTime = ZonedDateTime.ofInstant(new Date(dateValue.getTime()).toInstant(), ZoneId.systemDefault());
}
return dateTime;
}
public static DateTime getLocalDateTime(final ResultSet rs, final String columnName) throws SQLException {
DateTime dateTime = null;
public static ZonedDateTime getLocalDateTime(final ResultSet rs, final String columnName) throws SQLException {
ZonedDateTime dateTime = null;
final Timestamp dateValue = rs.getTimestamp(columnName);
if (dateValue != null) {
dateTime = new DateTime(dateValue.getTime()).withZone(getDateTimeZoneOfTenant());
dateTime = ZonedDateTime.ofInstant(new Date(dateValue.getTime()).toInstant(), getDateTimeZoneOfTenant());
}
return dateTime;
}
public static LocalDate getLocalDate(final ResultSet rs, final String columnName) throws SQLException {
LocalDate localDate = null;
final Date dateValue = rs.getDate(columnName);
final Date dateValue = rs.getTimestamp(columnName);
if (dateValue != null) {
localDate = new LocalDate(dateValue);
localDate = LocalDate.ofInstant(dateValue.toInstant(), ZoneId.systemDefault());
}
return localDate;
}
public static LocalTime getLocalTime(final ResultSet rs, final String columnName) throws SQLException {
LocalTime localTime = null;
final Date timeValue = rs.getTime(columnName);
final Date timeValue = rs.getTimestamp(columnName);
if (timeValue != null) {
localTime = new LocalTime(timeValue);
localTime = LocalTime.ofInstant(timeValue.toInstant(), ZoneId.systemDefault());
}
return localTime;
}
@@ -18,10 +18,10 @@
*/
package org.apache.fineract.infrastructure.core.domain;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.joda.time.Days;
import org.joda.time.LocalDate;
public class LocalDateInterval {
@@ -50,7 +50,7 @@ public class LocalDateInterval {
}
private Integer daysBetween() {
return Days.daysBetween(this.startDate, this.endDate).getDays();
return Math.toIntExact(ChronoUnit.DAYS.between(this.startDate, this.endDate));
}
public boolean containsPortionOf(final LocalDateInterval interval) {
@@ -26,6 +26,9 @@ import com.google.gson.JsonParser;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.security.InvalidParameterException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.MonthDay;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
@@ -36,9 +39,6 @@ import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.apache.fineract.infrastructure.core.exception.InvalidJsonException;
import org.apache.fineract.infrastructure.core.exception.UnsupportedParameterException;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import org.joda.time.MonthDay;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
@@ -21,6 +21,9 @@ package org.apache.fineract.infrastructure.core.serialization;
import com.google.gson.ExclusionStrategy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.time.LocalDate;
import java.time.MonthDay;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
@@ -31,9 +34,6 @@ import org.apache.fineract.infrastructure.core.api.JodaMonthDayAdapter;
import org.apache.fineract.infrastructure.core.api.ParameterListExclusionStrategy;
import org.apache.fineract.infrastructure.core.api.ParameterListInclusionStrategy;
import org.apache.fineract.infrastructure.core.exception.UnsupportedParameterException;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.joda.time.MonthDay;
import org.springframework.stereotype.Service;
/**
@@ -102,7 +102,7 @@ public final class GoogleGsonSerializerHelper {
public static void registerTypeAdapters(final GsonBuilder builder) {
builder.registerTypeAdapter(java.util.Date.class, new DateAdapter());
builder.registerTypeAdapter(LocalDate.class, new JodaLocalDateAdapter());
builder.registerTypeAdapter(DateTime.class, new JodaDateTimeAdapter());
builder.registerTypeAdapter(ZonedDateTime.class, new JodaDateTimeAdapter());
builder.registerTypeAdapter(MonthDay.class, new JodaMonthDayAdapter());
}
}
@@ -18,6 +18,10 @@
*/
package org.apache.fineract.infrastructure.core.serialization;
import static java.time.temporal.ChronoField.DAY_OF_MONTH;
import static java.time.temporal.ChronoField.MONTH_OF_YEAR;
import static java.time.temporal.ChronoField.YEAR_OF_ERA;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
@@ -27,6 +31,13 @@ import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
import java.text.ParseException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.MonthDay;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -35,11 +46,6 @@ import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.apache.fineract.infrastructure.core.data.ApiParameterError;
import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import org.joda.time.MonthDay;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.springframework.format.number.NumberStyleFormatter;
/**
@@ -303,7 +309,7 @@ public class JsonParserHelper {
final Integer month = dateArray.get(1).getAsInt();
final Integer day = dateArray.get(2).getAsInt();
value = new LocalDate().withYearOfEra(year).withMonthOfYear(month).withDayOfMonth(day);
value = LocalDate.now(ZoneId.systemDefault()).with(YEAR_OF_ERA, year).with(MONTH_OF_YEAR, month).with(DAY_OF_MONTH, day);
}
}
@@ -336,8 +342,9 @@ public class JsonParserHelper {
final String valueAsString = primitive.getAsString();
if (StringUtils.isNotBlank(valueAsString)) {
try {
final DateTimeFormatter formatter = DateTimeFormat.forPattern(dateFormat).withLocale(clientApplicationLocale);
value = MonthDay.parse(valueAsString.toLowerCase(clientApplicationLocale), formatter);
final DateTimeFormatter formatter = new DateTimeFormatterBuilder().parseCaseInsensitive().parseLenient()
.appendPattern(dateFormat).toFormatter(clientApplicationLocale);
value = MonthDay.parse(valueAsString, formatter);
} catch (final IllegalArgumentException e) {
final List<ApiParameterError> dataValidationErrors = new ArrayList<>();
final ApiParameterError error = ApiParameterError.parameterError("validation.msg.invalid.month.day",
@@ -406,7 +413,7 @@ public class JsonParserHelper {
parametersPassedInCommand.add(parameterName);
try {
DateTimeFormatter timeFormtter = DateTimeFormat.forPattern(timeFormat);
DateTimeFormatter timeFormtter = DateTimeFormatter.ofPattern(timeFormat);
final JsonPrimitive primitive = object.get(parameterName).getAsJsonPrimitive();
timeValueAsString = primitive.getAsString();
if (StringUtils.isNotBlank(timeValueAsString)) {
@@ -462,8 +469,11 @@ public class JsonParserHelper {
LocalDateTime eventLocalDateTime = null;
if (StringUtils.isNotBlank(dateTimeAsString)) {
try {
eventLocalDateTime = DateTimeFormat.forPattern(dateTimeFormat).withLocale(clientApplicationLocale)
.parseLocalDateTime(dateTimeAsString.toLowerCase(clientApplicationLocale));
DateTimeFormatter formatter = new DateTimeFormatterBuilder().parseCaseInsensitive().parseLenient()
.appendPattern(dateTimeFormat).optionalStart().appendPattern(" HH:mm:ss").optionalEnd()
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0).parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0).toFormatter(clientApplicationLocale);
eventLocalDateTime = LocalDateTime.parse(dateTimeAsString, formatter);
} catch (final IllegalArgumentException e) {
final List<ApiParameterError> dataValidationErrors = new ArrayList<>();
final ApiParameterError error = ApiParameterError
@@ -20,6 +20,11 @@ package org.apache.fineract.infrastructure.core.service;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -27,12 +32,6 @@ import java.util.TimeZone;
import org.apache.fineract.infrastructure.core.data.ApiParameterError;
import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenant;
import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
public final class DateUtils {
@@ -40,11 +39,11 @@ public final class DateUtils {
}
public static DateTimeZone getDateTimeZoneOfTenant() {
public static ZoneId getDateTimeZoneOfTenant() {
final FineractPlatformTenant tenant = ThreadLocalContextUtil.getTenant();
DateTimeZone zone = null;
ZoneId zone = null;
if (tenant != null) {
zone = DateTimeZone.forID(tenant.getTimezoneId());
zone = ZoneId.of(tenant.getTimezoneId());
}
return zone;
}
@@ -59,16 +58,16 @@ public final class DateUtils {
}
public static Date getDateOfTenant() {
return getLocalDateOfTenant().toDateTimeAtStartOfDay().toDate();
return Date.from(getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant());
}
public static LocalDate getLocalDateOfTenant() {
LocalDate today = new LocalDate();
LocalDate today = LocalDate.now(ZoneId.systemDefault());
final DateTimeZone zone = getDateTimeZoneOfTenant();
final ZoneId zone = getDateTimeZoneOfTenant();
if (zone != null) {
today = new LocalDate(zone);
today = LocalDate.now(zone);
}
return today;
@@ -76,11 +75,11 @@ public final class DateUtils {
public static LocalDateTime getLocalDateTimeOfTenant() {
LocalDateTime today = new LocalDateTime();
LocalDateTime today = LocalDateTime.now(ZoneId.systemDefault());
final DateTimeZone zone = getDateTimeZoneOfTenant();
final ZoneId zone = getDateTimeZoneOfTenant();
if (zone != null) {
today = new LocalDateTime(zone);
today = LocalDateTime.now(zone);
}
return today;
@@ -89,9 +88,8 @@ public final class DateUtils {
public static LocalDate parseLocalDate(final String stringDate, final String pattern) {
try {
final DateTimeFormatter dateStringFormat = DateTimeFormat.forPattern(pattern);
dateStringFormat.withZone(getDateTimeZoneOfTenant());
final DateTime dateTime = dateStringFormat.parseDateTime(stringDate);
final DateTimeFormatter dateStringFormat = DateTimeFormatter.ofPattern(pattern).withZone(getDateTimeZoneOfTenant());
final ZonedDateTime dateTime = ZonedDateTime.parse(stringDate, dateStringFormat);
return dateTime.toLocalDate();
} catch (final IllegalArgumentException e) {
final List<ApiParameterError> dataValidationErrors = new ArrayList<>();
@@ -18,6 +18,9 @@
*/
package org.apache.fineract.infrastructure.dataqueries.service;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.ChronoField;
import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;
@@ -28,8 +31,6 @@ import org.apache.fineract.infrastructure.dataqueries.data.ResultsetColumnHeader
import org.apache.fineract.infrastructure.dataqueries.data.ResultsetColumnValueData;
import org.apache.fineract.infrastructure.dataqueries.data.ResultsetRowData;
import org.apache.fineract.infrastructure.dataqueries.exception.DatatableNotFoundException;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -161,15 +162,14 @@ public class GenericDataServiceImpl implements GenericDataService {
writer.append(currVal);
} else {
if (currColType.equals("DATE")) {
final LocalDate localDate = new LocalDate(currVal);
final LocalDate localDate = LocalDate.parse(currVal);
writer.append(
"[" + localDate.getYear() + ", " + localDate.getMonthOfYear() + ", " + localDate.getDayOfMonth() + "]");
"[" + localDate.getYear() + ", " + localDate.getMonthValue() + ", " + localDate.getDayOfMonth() + "]");
} else if (currColType.equals("DATETIME")) {
final LocalDateTime localDateTime = new LocalDateTime(currVal);
writer.append("[" + localDateTime.getYear() + ", " + localDateTime.getMonthOfYear() + ", "
+ localDateTime.getDayOfMonth() + " " + localDateTime.getHourOfDay() + ", "
+ localDateTime.getMinuteOfHour() + ", " + localDateTime.getSecondOfMinute() + ", "
+ localDateTime.getMillisOfSecond() + "]");
final LocalDateTime localDateTime = LocalDateTime.parse(currVal);
writer.append("[" + localDateTime.getYear() + ", " + localDateTime.getMonthValue() + ", "
+ localDateTime.getDayOfMonth() + " " + localDateTime.getHour() + ", " + localDateTime.getMinute()
+ ", " + localDateTime.getSecond() + ", " + localDateTime.get(ChronoField.MILLI_OF_SECOND) + "]");
} else {
writer.append(doubleQuote + replace(currVal, doubleQuote, slashDoubleQuote) + doubleQuote);
}
@@ -26,6 +26,8 @@ import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -67,8 +69,6 @@ import org.apache.fineract.infrastructure.security.service.PlatformSecurityConte
import org.apache.fineract.infrastructure.security.utils.ColumnValidator;
import org.apache.fineract.infrastructure.security.utils.SQLInjectionValidator;
import org.apache.fineract.useradministration.domain.AppUser;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.entityaccess.data;
import com.google.gson.JsonElement;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
@@ -42,7 +43,6 @@ import org.apache.fineract.portfolio.savings.domain.SavingsProductRepository;
import org.apache.fineract.portfolio.savings.exception.SavingsProductNotFoundException;
import org.apache.fineract.useradministration.domain.RoleRepository;
import org.apache.fineract.useradministration.exception.RoleNotFoundException;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -18,6 +18,7 @@
*/
package org.apache.fineract.infrastructure.gcm.domain;
import java.time.ZoneId;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
@@ -50,7 +51,7 @@ public final class DeviceRegistration extends AbstractPersistableCustom {
private DeviceRegistration(final Client client, final String registrationId) {
this.client = client;
this.registrationId = registrationId;
this.updatedOnDate = DateUtils.getLocalDateTimeOfTenant().toDate();
this.updatedOnDate = Date.from(DateUtils.getLocalDateTimeOfTenant().atZone(ZoneId.systemDefault()).toInstant());
}
public static DeviceRegistration instance(final Client client, final String registrationId) {
@@ -20,14 +20,16 @@ package org.apache.fineract.infrastructure.gcm.service;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Collection;
import java.util.Date;
import org.apache.fineract.infrastructure.core.domain.JdbcSupport;
import org.apache.fineract.infrastructure.core.service.RoutingDataSource;
import org.apache.fineract.infrastructure.gcm.domain.DeviceRegistrationData;
import org.apache.fineract.infrastructure.gcm.exception.DeviceRegistrationNotFoundException;
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
import org.apache.fineract.portfolio.client.data.ClientData;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
@@ -72,7 +74,8 @@ public class DeviceRegistrationReadPlatformServiceImpl implements DeviceRegistra
final Long clientId = rs.getLong("clientId");
final String clientName = rs.getString("clientName");
ClientData clientData = ClientData.instance(clientId, clientName);
return DeviceRegistrationData.instance(id, clientData, registrationId, updatedOnDate.toDate());
return DeviceRegistrationData.instance(id, clientData, registrationId,
Date.from(updatedOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()));
}
}
@@ -18,6 +18,8 @@
*/
package org.apache.fineract.infrastructure.gcm.service;
import java.time.ZoneId;
import java.util.Date;
import javax.persistence.PersistenceException;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.apache.fineract.infrastructure.core.exception.PlatformDataIntegrityException;
@@ -93,7 +95,7 @@ public class DeviceRegistrationWritePlatformServiceImpl implements DeviceRegistr
Client client = this.clientRepositoryWrapper.findOneWithNotFoundDetection(clientId);
deviceRegistration.setClient(client);
deviceRegistration.setRegistrationId(registrationId);
deviceRegistration.setUpdatedOnDate(DateUtils.getLocalDateTimeOfTenant().toDate());
deviceRegistration.setUpdatedOnDate(Date.from(DateUtils.getLocalDateTimeOfTenant().atZone(ZoneId.systemDefault()).toInstant()));
return deviceRegistration;
}
@@ -19,8 +19,10 @@
package org.apache.fineract.infrastructure.gcm.service;
import java.io.IOException;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -107,7 +109,8 @@ public class NotificationSenderService {
res = s.send(msg, registrationId, 3);
if (res.getSuccess() != null && res.getSuccess() > 0) {
smsMessage.setStatusType(SmsMessageStatusType.SENT.getValue());
smsMessage.setDeliveredOnDate(DateUtils.getLocalDateOfTenant().toDate());
smsMessage.setDeliveredOnDate(
Date.from(DateUtils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant()));
} else if (res.getFailure() != null && res.getFailure() > 0) {
smsMessage.setStatusType(SmsMessageStatusType.FAILED.getValue());
}
@@ -19,12 +19,12 @@
package org.apache.fineract.infrastructure.hooks.api;
import io.swagger.v3.oas.annotations.media.Schema;
import java.time.LocalDate;
import java.util.List;
import org.apache.fineract.infrastructure.hooks.data.Event;
import org.apache.fineract.infrastructure.hooks.data.Field;
import org.apache.fineract.infrastructure.hooks.data.Grouping;
import org.apache.fineract.infrastructure.hooks.data.HookTemplateData;
import org.joda.time.LocalDate;
/**
* Created by sanyam on 11/8/17.
@@ -19,8 +19,8 @@
package org.apache.fineract.infrastructure.hooks.data;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.List;
import org.joda.time.LocalDate;
public final class HookData implements Serializable {
@@ -20,6 +20,7 @@ package org.apache.fineract.infrastructure.hooks.service;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDate;
import java.util.Collection;
import java.util.List;
import org.apache.fineract.infrastructure.core.domain.JdbcSupport;
@@ -34,7 +35,6 @@ import org.apache.fineract.infrastructure.hooks.domain.Hook;
import org.apache.fineract.infrastructure.hooks.domain.HookRepository;
import org.apache.fineract.infrastructure.hooks.exception.HookNotFoundException;
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.dao.EmptyResultDataAccessException;
@@ -19,11 +19,11 @@
package org.apache.fineract.infrastructure.reportmailingjob.api;
import io.swagger.v3.oas.annotations.media.Schema;
import java.time.ZonedDateTime;
import java.util.List;
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
import org.apache.fineract.infrastructure.dataqueries.data.ReportData;
import org.apache.fineract.infrastructure.reportmailingjob.data.ReportMailingJobTimelineData;
import org.joda.time.DateTime;
/**
* Created by sanyam on 13/8/17.
@@ -61,7 +61,7 @@ final class ReportMailingJobApiResourceSwagger {
@Schema(example = "Client Numbers Report")
public String description;
@Schema(example = "1469627093000")
public DateTime startDateTime;
public ZonedDateTime startDateTime;
@Schema(example = "")
public String recurrence;
public ReportMailingJobTimelineData timeline;
@@ -78,7 +78,7 @@ final class ReportMailingJobApiResourceSwagger {
@Schema(example = "{\"startDate\":\"2016-07-01\",\"endDate\":\"2016-08-02\",\"selectOffice\":\"1\",\"environementUrl\":\"environementUrl\"}")
public String stretchyReportParamMap;
@Schema(example = "1469627093000")
public DateTime nextRunDateTime;
public ZonedDateTime nextRunDateTime;
@Schema(example = "0")
public Integer numberOfRuns;
@Schema(example = "true")
@@ -103,7 +103,7 @@ final class ReportMailingJobApiResourceSwagger {
@Schema(example = "Client Numbers Report")
public String description;
@Schema(example = "1469627093000")
public DateTime startDateTime;
public ZonedDateTime startDateTime;
@Schema(example = "120")
public Long stretchyReportId;
@Schema(example = "info@musonisystem.com")
@@ -144,7 +144,7 @@ final class ReportMailingJobApiResourceSwagger {
@Schema(example = "dd-MM-yyyy HH:mm:ss")
public String dateFormat;
@Schema(example = "10-08-2016 23:30:00")
public DateTime startDateTime;
public ZonedDateTime startDateTime;
}
@Schema(description = "PutReportMailingJobsResponse")
@@ -159,7 +159,7 @@ final class ReportMailingJobApiResourceSwagger {
private PutReportMailingJobsResponseChanges() {}
@Schema(example = "10-08-2016 23:30:00")
public DateTime startDateTime;
public ZonedDateTime startDateTime;
}
@Schema(example = "1")
@@ -19,7 +19,7 @@
package org.apache.fineract.infrastructure.reportmailingjob.api;
import io.swagger.v3.oas.annotations.media.Schema;
import org.joda.time.DateTime;
import java.time.ZonedDateTime;
/**
* Created by sanyam on 13/8/17.
@@ -42,9 +42,9 @@ final class ReportMailingJobRunHistoryApiResourceSwagger {
@Schema(example = "1")
public Long reportMailingJobId;
@Schema(example = "1469627093050")
public DateTime startDateTime;
public ZonedDateTime startDateTime;
@Schema(example = "1469627093050")
public DateTime endDateTime;
public ZonedDateTime endDateTime;
@Schema(example = "success")
public String status;
@Schema(example = "")
@@ -18,10 +18,10 @@
*/
package org.apache.fineract.infrastructure.reportmailingjob.data;
import java.time.ZonedDateTime;
import java.util.List;
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
import org.apache.fineract.infrastructure.dataqueries.data.ReportData;
import org.joda.time.DateTime;
/**
* Immutable data object representing report mailing job data.
@@ -31,7 +31,7 @@ public final class ReportMailingJobData {
private final Long id;
private final String name;
private final String description;
private final DateTime startDateTime;
private final ZonedDateTime startDateTime;
private final String recurrence;
private final ReportMailingJobTimelineData timeline;
private final String emailRecipients;
@@ -40,8 +40,8 @@ public final class ReportMailingJobData {
private final EnumOptionData emailAttachmentFileFormat;
private final ReportData stretchyReport;
private final String stretchyReportParamMap;
private final DateTime previousRunDateTime;
private final DateTime nextRunDateTime;
private final ZonedDateTime previousRunDateTime;
private final ZonedDateTime nextRunDateTime;
private final String previousRunStatus;
private final String previousRunErrorLog;
private final String previousRunErrorMessage;
@@ -51,10 +51,10 @@ public final class ReportMailingJobData {
private final List<EnumOptionData> stretchyReportParamDateOptions;
private final Long runAsUserId;
private ReportMailingJobData(final Long id, final String name, final String description, final DateTime startDateTime,
private ReportMailingJobData(final Long id, final String name, final String description, final ZonedDateTime startDateTime,
final String recurrence, final ReportMailingJobTimelineData timeline, final String emailRecipients, final String emailSubject,
final String emailMessage, final EnumOptionData emailAttachmentFileFormat, final ReportData stretchyReport,
final String stretchyReportParamMap, final DateTime previousRunDateTime, final DateTime nextRunDateTime,
final String stretchyReportParamMap, final ZonedDateTime previousRunDateTime, final ZonedDateTime nextRunDateTime,
final String previousRunStatus, final String previousRunErrorLog, final String previousRunErrorMessage,
final Integer numberOfRuns, final boolean isActive, final List<EnumOptionData> emailAttachmentFileFormatOptions,
final List<EnumOptionData> stretchyReportParamDateOptions, final Long runAsUserId) {
@@ -85,12 +85,13 @@ public final class ReportMailingJobData {
/**
* @return an instance of the ReportMailingJobData class
**/
public static ReportMailingJobData newInstance(final Long id, final String name, final String description, final DateTime startDateTime,
final String recurrence, final ReportMailingJobTimelineData timeline, final String emailRecipients, final String emailSubject,
final String emailMessage, final EnumOptionData emailAttachmentFileFormat, final ReportData stretchyReport,
final String stretchyReportParamMap, final DateTime previousRunDateTime, final DateTime nextRunDateTime,
final String previousRunStatus, final String previousRunErrorLog, final String previousRunErrorMessage,
final Integer numberOfRuns, final boolean isActive, final Long runAsUserId) {
public static ReportMailingJobData newInstance(final Long id, final String name, final String description,
final ZonedDateTime startDateTime, final String recurrence, final ReportMailingJobTimelineData timeline,
final String emailRecipients, final String emailSubject, final String emailMessage,
final EnumOptionData emailAttachmentFileFormat, final ReportData stretchyReport, final String stretchyReportParamMap,
final ZonedDateTime previousRunDateTime, final ZonedDateTime nextRunDateTime, final String previousRunStatus,
final String previousRunErrorLog, final String previousRunErrorMessage, final Integer numberOfRuns, final boolean isActive,
final Long runAsUserId) {
return new ReportMailingJobData(id, name, description, startDateTime, recurrence, timeline, emailRecipients, emailSubject,
emailMessage, emailAttachmentFileFormat, stretchyReport, stretchyReportParamMap, previousRunDateTime, nextRunDateTime,
previousRunStatus, previousRunErrorLog, previousRunErrorMessage, numberOfRuns, isActive, null, null, runAsUserId);
@@ -145,7 +146,7 @@ public final class ReportMailingJobData {
/**
* @return the startDateTime
*/
public DateTime getStartDateTime() {
public ZonedDateTime getStartDateTime() {
return startDateTime;
}
@@ -208,14 +209,14 @@ public final class ReportMailingJobData {
/**
* @return the previousRunDateTime
*/
public DateTime getPreviousRunDateTime() {
public ZonedDateTime getPreviousRunDateTime() {
return previousRunDateTime;
}
/**
* @return the nextRunDateTime
*/
public DateTime getNextRunDateTime() {
public ZonedDateTime getNextRunDateTime() {
return nextRunDateTime;
}
@@ -18,7 +18,7 @@
*/
package org.apache.fineract.infrastructure.reportmailingjob.data;
import org.joda.time.DateTime;
import java.time.ZonedDateTime;
/**
* Immutable data object representing report mailing job run history data.
@@ -27,8 +27,8 @@ public final class ReportMailingJobRunHistoryData {
private final Long id;
private final Long reportMailingJobId;
private final DateTime startDateTime;
private final DateTime endDateTime;
private final ZonedDateTime startDateTime;
private final ZonedDateTime endDateTime;
private final String status;
private final String errorMessage;
private final String errorLog;
@@ -36,8 +36,8 @@ public final class ReportMailingJobRunHistoryData {
/**
* ReportMailingJobRunHistoryData private constructor
**/
private ReportMailingJobRunHistoryData(Long id, Long reportMailingJobId, DateTime startDateTime, DateTime endDateTime, String status,
String errorMessage, String errorLog) {
private ReportMailingJobRunHistoryData(Long id, Long reportMailingJobId, ZonedDateTime startDateTime, ZonedDateTime endDateTime,
String status, String errorMessage, String errorLog) {
this.id = id;
this.reportMailingJobId = reportMailingJobId;
this.startDateTime = startDateTime;
@@ -52,8 +52,8 @@ public final class ReportMailingJobRunHistoryData {
*
* @return ReportMailingJobRunHistoryData object
**/
public static ReportMailingJobRunHistoryData newInstance(Long id, Long reportMailingJobId, DateTime startDateTime, DateTime endDateTime,
String status, String errorMessage, String errorLog) {
public static ReportMailingJobRunHistoryData newInstance(Long id, Long reportMailingJobId, ZonedDateTime startDateTime,
ZonedDateTime endDateTime, String status, String errorMessage, String errorLog) {
return new ReportMailingJobRunHistoryData(id, reportMailingJobId, startDateTime, endDateTime, status, errorMessage, errorLog);
}
@@ -74,14 +74,14 @@ public final class ReportMailingJobRunHistoryData {
/**
* @return the startDateTime
*/
public DateTime getStartDateTime() {
public ZonedDateTime getStartDateTime() {
return startDateTime;
}
/**
* @return the endDateTime
*/
public DateTime getEndDateTime() {
public ZonedDateTime getEndDateTime() {
return endDateTime;
}
@@ -18,7 +18,7 @@
*/
package org.apache.fineract.infrastructure.reportmailingjob.data;
import org.joda.time.LocalDate;
import java.time.LocalDate;
/**
* Immutable data object represent the timeline events of a report mailing job (creation)
@@ -18,6 +18,10 @@
*/
package org.apache.fineract.infrastructure.reportmailingjob.domain;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -37,10 +41,6 @@ import org.apache.fineract.infrastructure.reportmailingjob.ReportMailingJobConst
import org.apache.fineract.infrastructure.reportmailingjob.data.ReportMailingJobEmailAttachmentFileFormat;
import org.apache.fineract.infrastructure.reportmailingjob.data.ReportMailingJobPreviousRunStatus;
import org.apache.fineract.useradministration.domain.AppUser;
import org.joda.time.DateTime;
import org.joda.time.LocalDateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
@Entity
@Table(name = "m_report_mailing_job", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "unique_name") })
@@ -129,7 +129,7 @@ public class ReportMailingJob extends AbstractAuditableCustom {
this.startDateTime = null;
if (startDateTime != null) {
this.startDateTime = startDateTime.toDate();
this.startDateTime = Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
this.recurrence = recurrence;
@@ -142,13 +142,13 @@ public class ReportMailingJob extends AbstractAuditableCustom {
this.previousRunDateTime = null;
if (previousRunDateTime != null) {
this.previousRunDateTime = previousRunDateTime.toDate();
this.previousRunDateTime = Date.from(previousRunDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
this.nextRunDateTime = null;
if (nextRunDateTime != null) {
this.nextRunDateTime = nextRunDateTime.toDate();
this.nextRunDateTime = Date.from(nextRunDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
this.previousRunStatus = null;
@@ -201,14 +201,14 @@ public class ReportMailingJob extends AbstractAuditableCustom {
.integerValueOfParameterNamed(ReportMailingJobConstants.EMAIL_ATTACHMENT_FILE_FORMAT_ID_PARAM_NAME);
final ReportMailingJobEmailAttachmentFileFormat emailAttachmentFileFormat = ReportMailingJobEmailAttachmentFileFormat
.newInstance(emailAttachmentFileFormatId);
LocalDateTime startDateTime = new LocalDateTime();
LocalDateTime startDateTime = LocalDateTime.now(ZoneId.systemDefault());
if (jsonCommand.hasParameter(ReportMailingJobConstants.START_DATE_TIME_PARAM_NAME)) {
final String startDateTimeString = jsonCommand
.stringValueOfParameterNamed(ReportMailingJobConstants.START_DATE_TIME_PARAM_NAME);
if (startDateTimeString != null) {
final DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(jsonCommand.dateFormat())
final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(jsonCommand.dateFormat())
.withLocale(jsonCommand.extractLocale());
startDateTime = LocalDateTime.parse(startDateTimeString, dateTimeFormatter);
}
@@ -304,15 +304,17 @@ public class ReportMailingJob extends AbstractAuditableCustom {
final String newStartDateTimeString = jsonCommand.stringValueOfParameterNamed(ReportMailingJobConstants.START_DATE_TIME_PARAM_NAME);
if (!StringUtils.isEmpty(newStartDateTimeString)) {
final DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(jsonCommand.dateFormat())
final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(jsonCommand.dateFormat())
.withLocale(jsonCommand.extractLocale());
final LocalDateTime newStartDateTime = LocalDateTime.parse(newStartDateTimeString, dateTimeFormatter);
final LocalDateTime oldStartDateTime = (this.startDateTime != null) ? new LocalDateTime(this.startDateTime) : null;
final LocalDateTime oldStartDateTime = (this.startDateTime != null)
? ZonedDateTime.ofInstant(this.startDateTime.toInstant(), ZoneId.systemDefault()).toLocalDateTime()
: null;
if ((oldStartDateTime != null) && !newStartDateTime.equals(oldStartDateTime)) {
actualChanges.put(ReportMailingJobConstants.START_DATE_TIME_PARAM_NAME, newStartDateTimeString);
this.startDateTime = newStartDateTime.toDate();
this.startDateTime = Date.from(newStartDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
}
@@ -372,8 +374,8 @@ public class ReportMailingJob extends AbstractAuditableCustom {
/**
* @return the value of the startDateTime property
**/
public DateTime getStartDateTime() {
return (this.startDateTime != null) ? new DateTime(this.startDateTime) : null;
public ZonedDateTime getStartDateTime() {
return (this.startDateTime != null) ? ZonedDateTime.ofInstant(this.startDateTime.toInstant(), ZoneId.systemDefault()) : null;
}
/**
@@ -456,15 +458,16 @@ public class ReportMailingJob extends AbstractAuditableCustom {
/**
* @return the previousRunDateTime
*/
public DateTime getPreviousRunDateTime() {
return (this.previousRunDateTime != null) ? new DateTime(this.previousRunDateTime) : null;
public ZonedDateTime getPreviousRunDateTime() {
return (this.previousRunDateTime != null) ? ZonedDateTime.ofInstant(this.previousRunDateTime.toInstant(), ZoneId.systemDefault())
: null;
}
/**
* @return the nextRunDateTime
*/
public DateTime getNextRunDateTime() {
return (this.nextRunDateTime != null) ? new DateTime(this.nextRunDateTime) : null;
public ZonedDateTime getNextRunDateTime() {
return (this.nextRunDateTime != null) ? ZonedDateTime.ofInstant(this.nextRunDateTime.toInstant(), ZoneId.systemDefault()) : null;
}
/**
@@ -531,9 +534,9 @@ public class ReportMailingJob extends AbstractAuditableCustom {
* -- previous run date
*
**/
public void updatePreviousRunDateTime(final DateTime previousRunDateTime) {
public void updatePreviousRunDateTime(final ZonedDateTime previousRunDateTime) {
if (previousRunDateTime != null) {
this.previousRunDateTime = previousRunDateTime.toDate();
this.previousRunDateTime = Date.from(previousRunDateTime.toInstant());
}
}
@@ -544,9 +547,9 @@ public class ReportMailingJob extends AbstractAuditableCustom {
* -- the next run DateTime
*
**/
public void updateNextRunDateTime(final DateTime nextRunDateTime) {
public void updateNextRunDateTime(final ZonedDateTime nextRunDateTime) {
if (nextRunDateTime != null) {
this.nextRunDateTime = nextRunDateTime.toDate();
this.nextRunDateTime = Date.from(nextRunDateTime.toInstant());
}
else {

Some files were not shown because too many files have changed in this diff Show More