diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/data/NoteData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/data/NoteData.java index a973835ad..70101927a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/data/NoteData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/data/NoteData.java @@ -18,7 +18,7 @@ */ package org.apache.fineract.portfolio.note.data; -import java.time.ZonedDateTime; +import java.time.OffsetDateTime; import org.apache.fineract.infrastructure.core.data.EnumOptionData; /** @@ -49,17 +49,17 @@ public class NoteData { @SuppressWarnings("unused") private final String createdByUsername; @SuppressWarnings("unused") - private final ZonedDateTime createdOn; + private final OffsetDateTime createdOn; @SuppressWarnings("unused") private final Long updatedById; @SuppressWarnings("unused") private final String updatedByUsername; @SuppressWarnings("unused") - private final ZonedDateTime updatedOn; + private final OffsetDateTime updatedOn; public NoteData(final Long id, final Long clientId, final Long groupId, final Long loanId, final Long transactionId, final Long depositAccountId, final Long savingAccountId, final EnumOptionData noteType, final String note, - final ZonedDateTime createdDate, final Long createdById, final String createdByUsername, final ZonedDateTime lastModifiedDate, + final OffsetDateTime createdDate, final Long createdById, final String createdByUsername, final OffsetDateTime lastModifiedDate, final Long lastModifiedById, final String updatedByUsername) { this.id = id; this.clientId = clientId; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/domain/Note.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/domain/Note.java index f52a7d972..5f2880619 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/domain/Note.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/domain/Note.java @@ -27,7 +27,7 @@ import javax.persistence.ManyToOne; import javax.persistence.Table; import org.apache.commons.lang3.StringUtils; import org.apache.fineract.infrastructure.core.api.JsonCommand; -import org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom; +import org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom; import org.apache.fineract.portfolio.client.domain.Client; import org.apache.fineract.portfolio.group.domain.Group; import org.apache.fineract.portfolio.loanaccount.domain.Loan; @@ -38,7 +38,7 @@ import org.apache.fineract.portfolio.shareaccounts.domain.ShareAccount; @Entity @Table(name = "m_note") -public class Note extends AbstractAuditableCustom { +public class Note extends AbstractAuditableWithUTCDateTimeCustom { @ManyToOne @JoinColumn(name = "client_id", nullable = true) diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/service/NoteReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/service/NoteReadPlatformServiceImpl.java index f5610e06c..3af2701a4 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/service/NoteReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/service/NoteReadPlatformServiceImpl.java @@ -20,7 +20,8 @@ package org.apache.fineract.portfolio.note.service; import java.sql.ResultSet; import java.sql.SQLException; -import java.time.ZonedDateTime; +import java.time.LocalDateTime; +import java.time.OffsetDateTime; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -28,6 +29,7 @@ import java.util.List; import org.apache.commons.lang3.StringUtils; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; +import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.portfolio.note.data.NoteData; import org.apache.fineract.portfolio.note.domain.NoteType; import org.apache.fineract.portfolio.note.exception.NoteNotFoundException; @@ -47,9 +49,10 @@ public class NoteReadPlatformServiceImpl implements NoteReadPlatformService { public String schema() { return " select n.id as id, n.client_id as clientId, n.group_id as groupId, n.loan_id as loanId, n.loan_transaction_id as transactionId, " - + " n.note_type_enum as noteTypeEnum, n.note as note, n.created_date as createdDate, n.createdby_id as createdById, " - + " cb.username as createdBy, n.lastmodified_date as lastModifiedDate, n.lastmodifiedby_id as lastModifiedById, mb.username as modifiedBy " - + " from m_note n left join m_appuser cb on cb.id=n.createdby_id left join m_appuser mb on mb.id=n.lastmodifiedby_id "; + + " n.note_type_enum as noteTypeEnum, n.note as note, n.created_date as createdDate, n.created_by as createdById, " + + " n.created_on_utc as createdDateUtc, n.last_modified_on_utc as lastModifiedDateUtc, " + + " cb.username as createdBy, n.lastmodified_date as lastModifiedDate, n.last_modified_by as lastModifiedById, mb.username as modifiedBy " + + " from m_note n left join m_appuser cb on cb.id=n.created_by left join m_appuser mb on mb.id=n.last_modified_by "; } @Override @@ -67,12 +70,21 @@ public class NoteReadPlatformServiceImpl implements NoteReadPlatformService { final Integer noteTypeId = JdbcSupport.getInteger(rs, "noteTypeEnum"); final EnumOptionData noteType = NoteEnumerations.noteType(noteTypeId); final String note = rs.getString("note"); - final ZonedDateTime createdDate = JdbcSupport.getDateTime(rs, "createdDate"); + final LocalDateTime createdDateLocal = JdbcSupport.getLocalDateTime(rs, "createdDate"); + final OffsetDateTime createdDateUtc = JdbcSupport.getOffsetDateTime(rs, "createdDateUtc"); final Long createdById = JdbcSupport.getLong(rs, "createdById"); - final ZonedDateTime lastModifiedDate = JdbcSupport.getDateTime(rs, "lastModifiedDate"); + final LocalDateTime lastModifiedDateLocal = JdbcSupport.getLocalDateTime(rs, "lastModifiedDate"); + final OffsetDateTime lastModifiedDateUtc = JdbcSupport.getOffsetDateTime(rs, "lastModifiedDateUtc"); final Long lastModifiedById = JdbcSupport.getLong(rs, "lastModifiedById"); final String createdByUsername = rs.getString("createdBy"); final String updatedByUsername = rs.getString("modifiedBy"); + final OffsetDateTime createdDate = createdDateUtc != null ? + createdDateUtc : + OffsetDateTime.of(createdDateLocal, DateUtils.getDateTimeZoneOfTenant().getRules().getOffset(createdDateLocal)); + final OffsetDateTime lastModifiedDate = lastModifiedDateUtc != null ? + lastModifiedDateUtc : + OffsetDateTime.of(lastModifiedDateLocal, + DateUtils.getDateTimeZoneOfTenant().getRules().getOffset(lastModifiedDateLocal)); return new NoteData(id, clientId, groupId, loanId, transactionId, null, null, noteType, note, createdDate, createdById, createdByUsername, lastModifiedDate, lastModifiedById, updatedByUsername); } diff --git a/fineract-provider/src/main/resources/db/changelog/tenant/parts/0033_add_audit_entries_to_note.xml b/fineract-provider/src/main/resources/db/changelog/tenant/parts/0033_add_audit_entries_to_note.xml new file mode 100644 index 000000000..19f519cdd --- /dev/null +++ b/fineract-provider/src/main/resources/db/changelog/tenant/parts/0033_add_audit_entries_to_note.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select count(*) from m_note + + + + + + + select count(*) from m_note + + + + + + + select count(*) from m_note where created_by is null or last_modified_by is null + + + + +