This is an automated email from the ASF dual-hosted git repository. aleks pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/fineract.git
commit 656ecdef9f9b081ca53499bf97341c6c98e9b93d Author: Adam Saghy <[email protected]> AuthorDate: Mon Aug 8 23:46:21 2022 +0200 FINERACT-1670: Add auditable fields to Calendar --- .../portfolio/calendar/data/CalendarData.java | 17 +++---- .../portfolio/calendar/domain/Calendar.java | 4 +- .../service/CalendarReadPlatformServiceImpl.java | 25 +++++++--- .../db/changelog/tenant/changelog-tenant.xml | 4 +- ...ies_to_loan_repayment_schedule_installment.xml} | 0 ...note.xml => 0034_add_audit_entries_to_note.xml} | 0 ....xml => 0035_add_audit_entries_to_calendar.xml} | 54 +++++++++++----------- 7 files changed, 59 insertions(+), 45 deletions(-) diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/data/CalendarData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/data/CalendarData.java index 6b6a2f39b..f19c1a829 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/data/CalendarData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/data/CalendarData.java @@ -21,6 +21,7 @@ package org.apache.fineract.portfolio.calendar.data; import java.io.Serializable; import java.time.LocalDate; import java.time.LocalTime; +import java.time.OffsetDateTime; import java.util.Collection; import java.util.List; import java.util.Objects; @@ -65,8 +66,8 @@ public final class CalendarData implements Serializable { private final String humanReadable; private final LocalDate recentEligibleMeetingDate; - private final LocalDate createdDate; - private final LocalDate lastUpdatedDate; + private final OffsetDateTime createdDate; + private final OffsetDateTime lastUpdatedDate; private final Long createdByUserId; private final String createdByUsername; private final Long lastUpdatedByUserId; @@ -204,7 +205,7 @@ public final class CalendarData implements Serializable { final Integer duration, final EnumOptionData type, final boolean repeating, final String recurrence, final EnumOptionData frequency, final Integer interval, final EnumOptionData repeatsOnDay, final EnumOptionData repeatsOnNthDayOfMonth, final EnumOptionData remindBy, final Integer firstReminder, - final Integer secondReminder, final String humanReadable, final LocalDate createdDate, final LocalDate lastUpdatedDate, + final Integer secondReminder, final String humanReadable, final OffsetDateTime createdDate, final OffsetDateTime lastUpdatedDate, final Long createdByUserId, final String createdByUsername, final Long lastUpdatedByUserId, final String lastUpdatedByUsername, final LocalTime meetingTime, final Integer repeatsOnDayOfMonth) { @@ -287,8 +288,8 @@ public final class CalendarData implements Serializable { final List<EnumOptionData> repeatsOnDayOptions = null; final List<EnumOptionData> frequencyNthDayTypeOptions = null; - final LocalDate createdDate = null; - final LocalDate lastUpdatedDate = null; + final OffsetDateTime createdDate = null; + final OffsetDateTime lastUpdatedDate = null; final Long createdByUserId = null; final String createdByUsername = null; final Long lastUpdatedByUserId = null; @@ -326,8 +327,8 @@ public final class CalendarData implements Serializable { final EnumOptionData frequency, final Integer interval, final EnumOptionData repeatsOnDay, final EnumOptionData repeatsOnNthDayOfMonth, final EnumOptionData remindBy, final Integer firstReminder, final Integer secondReminder, final Collection<LocalDate> recurringDates, final Collection<LocalDate> nextTenRecurringDates, - final String humanReadable, final LocalDate recentEligibleMeetingDate, final LocalDate createdDate, - final LocalDate lastUpdatedDate, final Long createdByUserId, final String createdByUsername, final Long lastUpdatedByUserId, + final String humanReadable, final LocalDate recentEligibleMeetingDate, final OffsetDateTime createdDate, + final OffsetDateTime lastUpdatedDate, final Long createdByUserId, final String createdByUsername, final Long lastUpdatedByUserId, final String lastUpdatedByUsername, final Integer repeatsOnDayOfMonth, final List<EnumOptionData> entityTypeOptions, final List<EnumOptionData> calendarTypeOptions, final List<EnumOptionData> remindByOptions, final List<EnumOptionData> repeatsOptions, final List<EnumOptionData> repeatsOnDayOptions, final LocalTime meetingTime, @@ -404,7 +405,7 @@ public final class CalendarData implements Serializable { return this.endDate; } - public LocalDate getCreatedDate() { + public OffsetDateTime getCreatedDate() { return this.createdDate; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/Calendar.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/Calendar.java index 75fa4406c..a7eb4894f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/Calendar.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/Calendar.java @@ -18,6 +18,7 @@ */ package org.apache.fineract.portfolio.calendar.domain; +import org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom; import static org.apache.fineract.portfolio.calendar.CalendarConstants.CALENDAR_RESOURCE_NAME; import java.time.LocalDate; @@ -39,7 +40,6 @@ import org.apache.commons.lang3.StringUtils; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.data.ApiParameterError; import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; -import org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.portfolio.calendar.CalendarConstants.CalendarSupportedParameters; @@ -50,7 +50,7 @@ import org.apache.fineract.portfolio.common.domain.NthDayType; @Entity @Table(name = "m_calendar") -public class Calendar extends AbstractAuditableCustom { +public class Calendar extends AbstractAuditableWithUTCDateTimeCustom { @Column(name = "title", length = 50, nullable = false) private String title; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarReadPlatformServiceImpl.java index 85f964463..12a07ab69 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarReadPlatformServiceImpl.java @@ -21,7 +21,9 @@ package org.apache.fineract.portfolio.calendar.service; import java.sql.ResultSet; import java.sql.SQLException; import java.time.LocalDate; +import java.time.LocalDateTime; import java.time.LocalTime; +import java.time.OffsetDateTime; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -56,9 +58,10 @@ public class CalendarReadPlatformServiceImpl implements CalendarReadPlatformServ + " c.duration as duration, c.calendar_type_enum as typeId, c.repeating as repeating, " + " c.recurrence as recurrence, c.remind_by_enum as remindById, c.first_reminder as firstReminder, c.second_reminder as secondReminder, " + " c.created_date as createdDate, c.lastmodified_date as updatedDate, creatingUser.id as creatingUserId, creatingUser.username as creatingUserName, " + + " c.created_on_utc as createdDateUtc, c.last_modified_on_utc as updatedDateUtc, " + " updatingUser.id as updatingUserId, updatingUser.username as updatingUserName,c.meeting_time as meetingTime " + " from m_calendar c join m_calendar_instance ci on ci.calendar_id=c.id, m_appuser as creatingUser, m_appuser as updatingUser" - + " where c.createdby_id=creatingUser.id and c.lastmodifiedby_id=updatingUser.id "; + + " where c.created_by=creatingUser.id and c.last_modified_by=updatingUser.id "; } @Override @@ -96,17 +99,25 @@ public class CalendarReadPlatformServiceImpl implements CalendarReadPlatformServ humanReadable = CalendarUtils.getRRuleReadable(startDate, recurrence); } Integer monthOnDay = CalendarUtils.getMonthOnDay(recurrence); - final LocalDate createdDate = JdbcSupport.getLocalDate(rs, "createdDate"); - final LocalDate lastUpdatedDate = JdbcSupport.getLocalDate(rs, "updatedDate"); + final LocalDateTime createdDateLocal = JdbcSupport.getLocalDateTime(rs, "createdDate"); + final OffsetDateTime createdDateUtc = JdbcSupport.getOffsetDateTime(rs, "createdDateUtc"); + final LocalDateTime lastModifiedDateLocal = JdbcSupport.getLocalDateTime(rs, "updatedDate"); + final OffsetDateTime lastModifiedDateUtc = JdbcSupport.getOffsetDateTime(rs, "updatedDateUtc"); final Long createdByUserId = rs.getLong("creatingUserId"); final String createdByUserName = rs.getString("creatingUserName"); final Long lastUpdatedByUserId = rs.getLong("updatingUserId"); final String lastUpdatedByUserName = rs.getString("updatingUserName"); final LocalTime meetingTime = JdbcSupport.getLocalTime(rs, "meetingTime"); - + 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 CalendarData.instance(id, calendarInstanceId, entityId, entityType, title, description, location, startDate, endDate, duration, type, repeating, recurrence, frequency, interval, repeatsOnDay, repeatsOnNthDayOfMonth, remindBy, - firstReminder, secondReminder, humanReadable, createdDate, lastUpdatedDate, createdByUserId, createdByUserName, + firstReminder, secondReminder, humanReadable, createdDate, lastModifiedDate, createdByUserId, createdByUserName, lastUpdatedByUserId, lastUpdatedByUserName, meetingTime, monthOnDay); } } @@ -487,8 +498,8 @@ public class CalendarReadPlatformServiceImpl implements CalendarReadPlatformServ humanReadable = CalendarUtils.getRRuleReadable(startDate, recurrence); } - final LocalDate createdDate = null; - final LocalDate lastUpdatedDate = null; + final OffsetDateTime createdDate = null; + final OffsetDateTime lastUpdatedDate = null; final Long createdByUserId = null; final String createdByUserName = null; final Long lastUpdatedByUserId = null; diff --git a/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml b/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml index 946fae600..4d60f259d 100644 --- a/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml +++ b/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml @@ -52,5 +52,7 @@ <include file="parts/0030_add_audit_entries_to_business_date.xml" relativeToChangelogFile="true"/> <include file="parts/0031_add_audit_entries_to_client_identifier.xml" relativeToChangelogFile="true"/> <include file="parts/0032_add_some_missing_indexes.xml" relativeToChangelogFile="true"/> ->>>>>>> 92a62bc2d (FINERACT-1670: Add some missing indexes) + <include file="parts/0033_add_audit_entries_to_loan_repayment_schedule_installment.xml" relativeToChangelogFile="true"/> + <include file="parts/0034_add_audit_entries_to_note.xml" relativeToChangelogFile="true"/> + <include file="parts/0035_add_audit_entries_to_calendar.xml" relativeToChangelogFile="true"/> </databaseChangeLog> diff --git a/fineract-provider/src/main/resources/db/changelog/tenant/parts/0032_add_audit_entries_to_loan_repayment_schedule_installment.xml b/fineract-provider/src/main/resources/db/changelog/tenant/parts/0033_add_audit_entries_to_loan_repayment_schedule_installment.xml similarity index 100% rename from fineract-provider/src/main/resources/db/changelog/tenant/parts/0032_add_audit_entries_to_loan_repayment_schedule_installment.xml rename to fineract-provider/src/main/resources/db/changelog/tenant/parts/0033_add_audit_entries_to_loan_repayment_schedule_installment.xml 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/0034_add_audit_entries_to_note.xml similarity index 100% copy from fineract-provider/src/main/resources/db/changelog/tenant/parts/0033_add_audit_entries_to_note.xml copy to fineract-provider/src/main/resources/db/changelog/tenant/parts/0034_add_audit_entries_to_note.xml 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/0035_add_audit_entries_to_calendar.xml similarity index 53% rename from fineract-provider/src/main/resources/db/changelog/tenant/parts/0033_add_audit_entries_to_note.xml rename to fineract-provider/src/main/resources/db/changelog/tenant/parts/0035_add_audit_entries_to_calendar.xml index 19f519cdd..43204ed69 100644 --- 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/0035_add_audit_entries_to_calendar.xml @@ -22,56 +22,56 @@ <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"> + <changeSet author="fineract" id="calendar-1" context="mysql"> + <addColumn tableName="m_calendar"> <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"> + <changeSet author="fineract" id="calendar-1" context="postgresql"> + <addColumn tableName="m_calendar"> <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 id="calendar-2" author="fineract"> + <dropNotNullConstraint tableName="m_calendar" columnName="created_date" columnDataType="datetime"/> + <dropNotNullConstraint tableName="m_calendar" 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 id="calendar-3" author="fineract"> + <renameColumn tableName="m_calendar" oldColumnName="createdby_id" newColumnName="created_by" columnDataType="BIGINT"/> + <renameColumn tableName="m_calendar" 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" + <changeSet author="fineract" id="calendar-4"> + <addForeignKeyConstraint baseColumnNames="created_by" baseTableName="m_calendar" + constraintName="FK_calendar_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" + <addForeignKeyConstraint baseColumnNames="last_modified_by" baseTableName="m_calendar" + constraintName="FK_calendar_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"> + <changeSet id="calendar-5" author="fineract" context="mysql"> <preConditions onFail="MARK_RAN"> - <sqlCheck expectedResult="0">select count(*) from m_note</sqlCheck> + <sqlCheck expectedResult="0">select count(*) from m_calendar</sqlCheck> </preConditions> - <addNotNullConstraint tableName="m_note" columnName="created_on_utc" columnDataType="DATETIME"/> - <addNotNullConstraint tableName="m_note" columnName="last_modified_on_utc" columnDataType="DATETIME"/> + <addNotNullConstraint tableName="m_calendar" columnName="created_on_utc" columnDataType="DATETIME"/> + <addNotNullConstraint tableName="m_calendar" columnName="last_modified_on_utc" columnDataType="DATETIME"/> </changeSet> - <changeSet id="note-5" author="fineract" context="postgresql"> + <changeSet id="calendar-5" author="fineract" context="postgresql"> <preConditions onFail="MARK_RAN"> - <sqlCheck expectedResult="0">select count(*) from m_note</sqlCheck> + <sqlCheck expectedResult="0">select count(*) from m_calendar</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"/> + <addNotNullConstraint tableName="m_calendar" columnName="created_on_utc" columnDataType="TIMESTAMP WITH TIME ZONE"/> + <addNotNullConstraint tableName="m_calendar" columnName="last_modified_on_utc" columnDataType="TIMESTAMP WITH TIME ZONE"/> </changeSet> - <changeSet id="note-6" author="fineract"> + <changeSet id="calendar-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> + <sqlCheck expectedResult="0">select count(*) from m_calendar 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"/> + <addNotNullConstraint tableName="m_calendar" columnName="created_by" columnDataType="BIGINT"/> + <addNotNullConstraint tableName="m_calendar" columnName="last_modified_by" columnDataType="BIGINT"/> </changeSet> </databaseChangeLog>
