FINERACT-1670: Add auditable fields to Note
This commit is contained in:
committed by
Aleksandar Vidakovic
parent
4029464e32
commit
e47e2cd1e3
+4
-4
@@ -18,7 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.fineract.portfolio.note.data;
|
package org.apache.fineract.portfolio.note.data;
|
||||||
|
|
||||||
import java.time.ZonedDateTime;
|
import java.time.OffsetDateTime;
|
||||||
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
|
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -49,17 +49,17 @@ public class NoteData {
|
|||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private final String createdByUsername;
|
private final String createdByUsername;
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private final ZonedDateTime createdOn;
|
private final OffsetDateTime createdOn;
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private final Long updatedById;
|
private final Long updatedById;
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private final String updatedByUsername;
|
private final String updatedByUsername;
|
||||||
@SuppressWarnings("unused")
|
@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,
|
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 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) {
|
final Long lastModifiedById, final String updatedByUsername) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.clientId = clientId;
|
this.clientId = clientId;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ import javax.persistence.ManyToOne;
|
|||||||
import javax.persistence.Table;
|
import javax.persistence.Table;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.fineract.infrastructure.core.api.JsonCommand;
|
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.client.domain.Client;
|
||||||
import org.apache.fineract.portfolio.group.domain.Group;
|
import org.apache.fineract.portfolio.group.domain.Group;
|
||||||
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
|
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
|
||||||
@@ -38,7 +38,7 @@ import org.apache.fineract.portfolio.shareaccounts.domain.ShareAccount;
|
|||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name = "m_note")
|
@Table(name = "m_note")
|
||||||
public class Note extends AbstractAuditableCustom {
|
public class Note extends AbstractAuditableWithUTCDateTimeCustom {
|
||||||
|
|
||||||
@ManyToOne
|
@ManyToOne
|
||||||
@JoinColumn(name = "client_id", nullable = true)
|
@JoinColumn(name = "client_id", nullable = true)
|
||||||
|
|||||||
+18
-6
@@ -20,7 +20,8 @@ package org.apache.fineract.portfolio.note.service;
|
|||||||
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.time.ZonedDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.OffsetDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@@ -28,6 +29,7 @@ import java.util.List;
|
|||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
|
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
|
||||||
import org.apache.fineract.infrastructure.core.domain.JdbcSupport;
|
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.data.NoteData;
|
||||||
import org.apache.fineract.portfolio.note.domain.NoteType;
|
import org.apache.fineract.portfolio.note.domain.NoteType;
|
||||||
import org.apache.fineract.portfolio.note.exception.NoteNotFoundException;
|
import org.apache.fineract.portfolio.note.exception.NoteNotFoundException;
|
||||||
@@ -47,9 +49,10 @@ public class NoteReadPlatformServiceImpl implements NoteReadPlatformService {
|
|||||||
|
|
||||||
public String schema() {
|
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, "
|
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, "
|
+ " n.note_type_enum as noteTypeEnum, n.note as note, n.created_date as createdDate, n.created_by as createdById, "
|
||||||
+ " cb.username as createdBy, n.lastmodified_date as lastModifiedDate, n.lastmodifiedby_id as lastModifiedById, mb.username as modifiedBy "
|
+ " n.created_on_utc as createdDateUtc, n.last_modified_on_utc as lastModifiedDateUtc, "
|
||||||
+ " 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 ";
|
+ " 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
|
@Override
|
||||||
@@ -67,12 +70,21 @@ public class NoteReadPlatformServiceImpl implements NoteReadPlatformService {
|
|||||||
final Integer noteTypeId = JdbcSupport.getInteger(rs, "noteTypeEnum");
|
final Integer noteTypeId = JdbcSupport.getInteger(rs, "noteTypeEnum");
|
||||||
final EnumOptionData noteType = NoteEnumerations.noteType(noteTypeId);
|
final EnumOptionData noteType = NoteEnumerations.noteType(noteTypeId);
|
||||||
final String note = rs.getString("note");
|
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 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 Long lastModifiedById = JdbcSupport.getLong(rs, "lastModifiedById");
|
||||||
final String createdByUsername = rs.getString("createdBy");
|
final String createdByUsername = rs.getString("createdBy");
|
||||||
final String updatedByUsername = rs.getString("modifiedBy");
|
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,
|
return new NoteData(id, clientId, groupId, loanId, transactionId, null, null, noteType, note, createdDate, createdById,
|
||||||
createdByUsername, lastModifiedDate, lastModifiedById, updatedByUsername);
|
createdByUsername, lastModifiedDate, lastModifiedById, updatedByUsername);
|
||||||
}
|
}
|
||||||
|
|||||||
+77
@@ -0,0 +1,77 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
|
||||||
|
-->
|
||||||
|
<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.3.xsd">
|
||||||
|
<changeSet author="fineract" id="note-1" context="mysql">
|
||||||
|
<addColumn tableName="m_note">
|
||||||
|
<column name="created_on_utc" type="DATETIME"/>
|
||||||
|
<column name="last_modified_on_utc" type="DATETIME"/>
|
||||||
|
</addColumn>
|
||||||
|
</changeSet>
|
||||||
|
<changeSet author="fineract" id="note-1" context="postgresql">
|
||||||
|
<addColumn tableName="m_note">
|
||||||
|
<column name="created_on_utc" type="TIMESTAMP WITH TIME ZONE"/>
|
||||||
|
<column name="last_modified_on_utc" type="TIMESTAMP WITH TIME ZONE"/>
|
||||||
|
</addColumn>
|
||||||
|
</changeSet>
|
||||||
|
|
||||||
|
<changeSet id="note-2" author="fineract">
|
||||||
|
<dropNotNullConstraint tableName="m_note" columnName="created_date" columnDataType="datetime"/>
|
||||||
|
<dropNotNullConstraint tableName="m_note" columnName="lastmodified_date" columnDataType="datetime"/>
|
||||||
|
</changeSet>
|
||||||
|
<changeSet id="note-3" author="fineract">
|
||||||
|
<renameColumn tableName="m_note" oldColumnName="createdby_id" newColumnName="created_by" columnDataType="BIGINT"/>
|
||||||
|
<renameColumn tableName="m_note" oldColumnName="lastmodifiedby_id" newColumnName="last_modified_by" columnDataType="BIGINT"/>
|
||||||
|
</changeSet>
|
||||||
|
<changeSet author="fineract" id="note-4">
|
||||||
|
<addForeignKeyConstraint baseColumnNames="created_by" baseTableName="m_note"
|
||||||
|
constraintName="FK_note_created_by" deferrable="false" initiallyDeferred="false"
|
||||||
|
onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="id"
|
||||||
|
referencedTableName="m_appuser" validate="true"/>
|
||||||
|
<addForeignKeyConstraint baseColumnNames="last_modified_by" baseTableName="m_note"
|
||||||
|
constraintName="FK_note_last_modified_by" deferrable="false" initiallyDeferred="false"
|
||||||
|
onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="id"
|
||||||
|
referencedTableName="m_appuser" validate="true"/>
|
||||||
|
</changeSet>
|
||||||
|
<changeSet id="note-5" author="fineract" context="mysql">
|
||||||
|
<preConditions onFail="MARK_RAN">
|
||||||
|
<sqlCheck expectedResult="0">select count(*) from m_note</sqlCheck>
|
||||||
|
</preConditions>
|
||||||
|
<addNotNullConstraint tableName="m_note" columnName="created_on_utc" columnDataType="DATETIME"/>
|
||||||
|
<addNotNullConstraint tableName="m_note" columnName="last_modified_on_utc" columnDataType="DATETIME"/>
|
||||||
|
</changeSet>
|
||||||
|
<changeSet id="note-5" author="fineract" context="postgresql">
|
||||||
|
<preConditions onFail="MARK_RAN">
|
||||||
|
<sqlCheck expectedResult="0">select count(*) from m_note</sqlCheck>
|
||||||
|
</preConditions>
|
||||||
|
<addNotNullConstraint tableName="m_note" columnName="created_on_utc" columnDataType="TIMESTAMP WITH TIME ZONE"/>
|
||||||
|
<addNotNullConstraint tableName="m_note" columnName="last_modified_on_utc" columnDataType="TIMESTAMP WITH TIME ZONE"/>
|
||||||
|
</changeSet>
|
||||||
|
<changeSet id="note-6" author="fineract">
|
||||||
|
<preConditions onFail="MARK_RAN">
|
||||||
|
<sqlCheck expectedResult="0">select count(*) from m_note where created_by is null or last_modified_by is null</sqlCheck>
|
||||||
|
</preConditions>
|
||||||
|
<addNotNullConstraint tableName="m_note" columnName="created_by" columnDataType="BIGINT"/>
|
||||||
|
<addNotNullConstraint tableName="m_note" columnName="last_modified_by" columnDataType="BIGINT"/>
|
||||||
|
</changeSet>
|
||||||
|
</databaseChangeLog>
|
||||||
Reference in New Issue
Block a user