This is an automated email from the ASF dual-hosted git repository.
arnold pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git
The following commit(s) were added to refs/heads/develop by this push:
new e15459c65 Datatables datetime fields management
e15459c65 is described below
commit e15459c659148565f0a3d38363ba62dcd0bb5616
Author: Jose Alberto Hernandez <[email protected]>
AuthorDate: Sat Jul 23 22:40:24 2022 -0500
Datatables datetime fields management
---
.../dataqueries/data/ResultsetRowData.java | 8 ++---
.../service/GenericDataServiceImpl.java | 41 +++++++++-------------
.../service/ReadReportingServiceImpl.java | 8 ++---
.../service/ReadWriteNonCoreDataServiceImpl.java | 30 ++++++++++------
.../parts/0019_refactor_loan_transaction.xml | 4 +--
5 files changed, 46 insertions(+), 45 deletions(-)
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/ResultsetRowData.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/ResultsetRowData.java
index d60252a1d..d000f15e2 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/ResultsetRowData.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/ResultsetRowData.java
@@ -22,17 +22,17 @@ import java.util.List;
public final class ResultsetRowData {
- private final List<String> row;
+ private final List<Object> row;
- public static ResultsetRowData create(final List<String> rowValues) {
+ public static ResultsetRowData create(final List<Object> rowValues) {
return new ResultsetRowData(rowValues);
}
- private ResultsetRowData(final List<String> rowValues) {
+ private ResultsetRowData(final List<Object> rowValues) {
this.row = rowValues;
}
- public List<String> getRow() {
+ public List<Object> getRow() {
return this.row;
}
}
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/GenericDataServiceImpl.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/GenericDataServiceImpl.java
index 8ea83c115..597bca73c 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/GenericDataServiceImpl.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/GenericDataServiceImpl.java
@@ -18,15 +18,17 @@
*/
package org.apache.fineract.infrastructure.dataqueries.service;
+import static java.lang.String.format;
+
+import java.sql.Timestamp;
import java.time.LocalDate;
import java.time.LocalDateTime;
-import java.time.temporal.ChronoField;
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
import javax.sql.DataSource;
import lombok.extern.slf4j.Slf4j;
import
org.apache.fineract.infrastructure.core.exception.PlatformDataIntegrityException;
-import org.apache.fineract.infrastructure.core.service.DateUtils;
import org.apache.fineract.infrastructure.core.service.RoutingDataSource;
import
org.apache.fineract.infrastructure.core.service.database.DatabaseIndependentQueryService;
import
org.apache.fineract.infrastructure.dataqueries.data.GenericResultsetData;
@@ -77,7 +79,7 @@ public class GenericDataServiceImpl implements
GenericDataService {
}
while (rs.next()) {
- final List<String> columnValues = new ArrayList<>();
+ final List<Object> columnValues = new ArrayList<>();
for (int i = 0; i < rsmd.getColumnCount(); i++) {
final String columnName = rsmd.getColumnName(i + 1);
final String columnValue = rs.getString(columnName);
@@ -134,12 +136,12 @@ public class GenericDataServiceImpl implements
GenericDataService {
final List<ResultsetColumnHeaderData> columnHeaders =
grs.getColumnHeaders();
final List<ResultsetRowData> data = grs.getData();
- List<String> row;
+ List<Object> row;
Integer rSize;
final String doubleQuote = "\"";
final String slashDoubleQuote = "\\\"";
String currColType;
- String currVal;
+ Object currVal;
for (int i = 0; i < data.size(); i++) {
writer.append("\n{");
@@ -160,23 +162,24 @@ public class GenericDataServiceImpl implements
GenericDataService {
if (currColType == null && colType.equalsIgnoreCase("DATE")) {
currColType = "DATE";
}
+ if (currColType == null &&
colType.equalsIgnoreCase("DATETIME")) {
+ currColType = "DATETIME";
+ }
currVal = row.get(j);
if (currVal != null && currColType != null) {
if (currColType.equals("DECIMAL") ||
currColType.equals("INTEGER")) {
writer.append(currVal);
} else {
if (currColType.equals("DATE")) {
- final LocalDate localDate =
LocalDate.parse(currVal);
- writer.append(
- "[" + localDate.getYear() + ", " +
localDate.getMonthValue() + ", " + localDate.getDayOfMonth() + "]");
+ final LocalDate localDate = new
java.sql.Date(((Date) currVal).getTime()).toLocalDate();
+ writer.append(format("[%d,%d,%d]",
localDate.getYear(), localDate.getMonthValue(), localDate.getDayOfMonth()));
} else if (currColType.equals("DATETIME")) {
- final LocalDateTime localDateTime =
LocalDateTime.parse(formatDateTimeValue(currVal),
- DateUtils.DEFAULT_DATETIME_FORMATTER);
- writer.append("[" + localDateTime.getYear() + ", "
+ localDateTime.getMonthValue() + ", "
- + localDateTime.getDayOfMonth() + ", " +
localDateTime.getHour() + ", " + localDateTime.getMinute()
- + ", " + localDateTime.getSecond() + ", "
+ localDateTime.get(ChronoField.MILLI_OF_SECOND) + "]");
+ final LocalDateTime ldt = currVal instanceof
Timestamp ? ((Timestamp) currVal).toLocalDateTime()
+ : (LocalDateTime) currVal;
+ writer.append(format("[%d,%d,%d,%d,%d,%d,%d]",
ldt.getYear(), ldt.getMonthValue(), ldt.getDayOfMonth(),
+ ldt.getHour(), ldt.getMinute(),
ldt.getSecond(), ldt.getNano()));
} else {
- writer.append(doubleQuote + replace(currVal,
doubleQuote, slashDoubleQuote) + doubleQuote);
+ writer.append(doubleQuote + replace((String)
currVal, doubleQuote, slashDoubleQuote) + doubleQuote);
}
}
} else {
@@ -264,14 +267,4 @@ public class GenericDataServiceImpl implements
GenericDataService {
throw new DatatableNotFoundException(datatable);
}
}
-
- private String formatDateTimeValue(String dateTimeValue) {
- if (dateTimeValue.length() > 19) {
- dateTimeValue = dateTimeValue.substring(0, 19);
- }
- if (dateTimeValue.contains("T")) {
- dateTimeValue = dateTimeValue.replace("T", " ");
- }
- return dateTimeValue;
- }
}
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadReportingServiceImpl.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadReportingServiceImpl.java
index 8f9ca8b80..aa07c9c63 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadReportingServiceImpl.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadReportingServiceImpl.java
@@ -115,7 +115,7 @@ public class ReadReportingServiceImpl implements
ReadReportingService {
writer.append('\n');
final List<ResultsetRowData> data = result.getData();
- List<String> row;
+ List<Object> row;
Integer rSize;
// String currCol;
String currColType;
@@ -129,7 +129,7 @@ public class ReadReportingServiceImpl implements
ReadReportingService {
for (int j = 0; j < rSize; j++) {
// currCol = columnHeaders.get(j).getColumnName();
currColType = columnHeaders.get(j).getColumnType();
- currVal = row.get(j);
+ currVal = (String) row.get(j);
if (currVal != null) {
if (currColType.equals("DECIMAL") ||
currColType.equals("DOUBLE") || currColType.equals("BIGINT")
|| currColType.equals("SMALLINT") ||
currColType.equals("INT")) {
@@ -252,7 +252,7 @@ public class ReadReportingServiceImpl implements
ReadReportingService {
final List<ResultsetColumnHeaderData> columnHeaders =
result.getColumnHeaders();
final List<ResultsetRowData> data = result.getData();
- List<String> row;
+ List<Object> row;
log.info("NO. of Columns: {}", columnHeaders.size());
final Integer chSize = columnHeaders.size();
@@ -282,7 +282,7 @@ public class ReadReportingServiceImpl implements
ReadReportingService {
rSize = row.size();
for (int j = 0; j < rSize; j++) {
currColType = columnHeaders.get(j).getColumnType();
- currVal = row.get(j);
+ currVal = (String) row.get(j);
if (currVal != null) {
if (currColType.equals("DECIMAL") ||
currColType.equals("DOUBLE") || currColType.equals("BIGINT")
|| currColType.equals("SMALLINT") ||
currColType.equals("INT")) {
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImpl.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImpl.java
index ca887a6b0..5c9ad7fef 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImpl.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImpl.java
@@ -1310,7 +1310,7 @@ public class ReadWriteNonCoreDataServiceImpl implements
ReadWriteNonCoreDataServ
sql = sql + " order by " + order;
}
- final List<ResultsetRowData> result =
fillDatatableResultSetDataRows(sql);
+ final List<ResultsetRowData> result =
fillDatatableResultSetDataRows(sql, columnHeaders);
return new GenericResultsetData(columnHeaders, result);
}
@@ -1331,7 +1331,7 @@ public class ReadWriteNonCoreDataServiceImpl implements
ReadWriteNonCoreDataServ
sql = sql + " and id = " + id;
}
- final List<ResultsetRowData> result =
fillDatatableResultSetDataRows(sql);
+ final List<ResultsetRowData> result =
fillDatatableResultSetDataRows(sql, columnHeaders);
return new GenericResultsetData(columnHeaders, result);
}
@@ -1339,7 +1339,7 @@ public class ReadWriteNonCoreDataServiceImpl implements
ReadWriteNonCoreDataServ
private CommandProcessingResult checkMainResourceExistsWithinScope(final
String appTable, final Long appTableId) {
final String sql = dataScopedSQL(appTable, appTableId);
- LOG.info("data scoped sql: {}", sql);
+ LOG.debug("data scoped sql: {}", sql);
final SqlRowSet rs = this.jdbcTemplate.queryForRowSet(sql);
if (!rs.next()) {
@@ -1471,22 +1471,30 @@ public class ReadWriteNonCoreDataServiceImpl implements
ReadWriteNonCoreDataServ
return appTable;
}
- private List<ResultsetRowData> fillDatatableResultSetDataRows(final String
sql) {
+ private List<ResultsetRowData> fillDatatableResultSetDataRows(final String
sql, final List<ResultsetColumnHeaderData> columnHeaders) {
final List<ResultsetRowData> resultsetDataRows = new ArrayList<>();
+ final GenericResultsetData genericResultsetData = new
GenericResultsetData(columnHeaders, null);
final SqlRowSet rowSet = jdbcTemplate.queryForRowSet(sql); // NOSONAR
final SqlRowSetMetaData rsmd = rowSet.getMetaData();
while (rowSet.next()) {
- final List<String> columnValues = new ArrayList<>();
+ final List<Object> columnValues = new ArrayList<>();
+
for (int i = 0; i < rsmd.getColumnCount(); i++) {
final String columnName = rsmd.getColumnName(i + 1);
- final String columnValue = rowSet.getString(columnName);
- columnValues.add(columnValue);
+ final String colType =
genericResultsetData.getColTypeOfColumnNamed(columnName);
+ if ("DECIMAL".equalsIgnoreCase(colType)) {
+ columnValues.add(rowSet.getBigDecimal(columnName));
+ } else if ("DATE".equalsIgnoreCase(colType) || ("TIMESTAMP
WITHOUT TIME ZONE".equalsIgnoreCase(colType) // PostgreSQL
+ || "DATETIME".equalsIgnoreCase(colType) ||
"TIMESTAMP".equalsIgnoreCase(colType))) {
+ columnValues.add(rowSet.getObject(columnName));
+ } else {
+ columnValues.add(rowSet.getString(columnName));
+ }
}
- final ResultsetRowData resultsetDataRow =
ResultsetRowData.create(columnValues);
- resultsetDataRows.add(resultsetDataRow);
+ resultsetDataRows.add(ResultsetRowData.create(columnValues));
}
return resultsetDataRows;
@@ -1696,13 +1704,13 @@ public class ReadWriteNonCoreDataServiceImpl implements
ReadWriteNonCoreDataServ
private boolean columnChanged(final String key, final String keyValue,
final String colType, final GenericResultsetData grs) {
- final List<String> columnValues = grs.getData().get(0).getRow();
+ final List<Object> columnValues = grs.getData().get(0).getRow();
String columnValue = null;
for (int i = 0; i < grs.getColumnHeaders().size(); i++) {
if (key.equals(grs.getColumnHeaders().get(i).getColumnName())) {
- columnValue = columnValues.get(i);
+ columnValue = (String) columnValues.get(i);
if (notTheSame(columnValue, keyValue, colType)) {
return true;
diff --git
a/fineract-provider/src/main/resources/db/changelog/tenant/parts/0019_refactor_loan_transaction.xml
b/fineract-provider/src/main/resources/db/changelog/tenant/parts/0019_refactor_loan_transaction.xml
index bea15f721..373a15845 100644
---
a/fineract-provider/src/main/resources/db/changelog/tenant/parts/0019_refactor_loan_transaction.xml
+++
b/fineract-provider/src/main/resources/db/changelog/tenant/parts/0019_refactor_loan_transaction.xml
@@ -22,8 +22,8 @@
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.1.xsd">
- <changeSet author="fineract" id="1">
- <validCheckSum>8:4500ffb68c695d72caba498deff75643</validCheckSum>
+ <changeSet author="fineract" id="1" onValidationFail="MARK_RAN">
+ <validCheckSum>8:177f2e2cbac12752ede2182bbbfde6ae</validCheckSum>
<addColumn tableName="m_loan_transaction">
<column name="createdby_id" type="BIGINT"
valueComputed="appuser_id"/>
<column name="lastmodifiedby_id" type="BIGINT"/>