From 656ecdef9f9b081ca53499bf97341c6c98e9b93d Mon Sep 17 00:00:00 2001 From: Adam Saghy Date: Mon, 8 Aug 2022 23:46:21 +0200 Subject: [PATCH] FINERACT-1670: Add auditable fields to Calendar --- .../portfolio/calendar/data/CalendarData.java | 17 ++-- .../portfolio/calendar/domain/Calendar.java | 4 +- .../CalendarReadPlatformServiceImpl.java | 25 ++++-- .../db/changelog/tenant/changelog-tenant.xml | 4 +- ...o_loan_repayment_schedule_installment.xml} | 0 ...xml => 0034_add_audit_entries_to_note.xml} | 0 .../0035_add_audit_entries_to_calendar.xml | 77 +++++++++++++++++++ 7 files changed, 109 insertions(+), 18 deletions(-) rename fineract-provider/src/main/resources/db/changelog/tenant/parts/{0032_add_audit_entries_to_loan_repayment_schedule_installment.xml => 0033_add_audit_entries_to_loan_repayment_schedule_installment.xml} (100%) rename fineract-provider/src/main/resources/db/changelog/tenant/parts/{0033_add_audit_entries_to_note.xml => 0034_add_audit_entries_to_note.xml} (100%) create mode 100644 fineract-provider/src/main/resources/db/changelog/tenant/parts/0035_add_audit_entries_to_calendar.xml 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 repeatsOnDayOptions = null; final List 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 recurringDates, final Collection 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 entityTypeOptions, final List calendarTypeOptions, final List remindByOptions, final List repeatsOptions, final List 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 @@ ->>>>>>> 92a62bc2d (FINERACT-1670: Add some missing indexes) + + + 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% 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/0034_add_audit_entries_to_note.xml diff --git a/fineract-provider/src/main/resources/db/changelog/tenant/parts/0035_add_audit_entries_to_calendar.xml b/fineract-provider/src/main/resources/db/changelog/tenant/parts/0035_add_audit_entries_to_calendar.xml new file mode 100644 index 000000000..43204ed69 --- /dev/null +++ b/fineract-provider/src/main/resources/db/changelog/tenant/parts/0035_add_audit_entries_to_calendar.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select count(*) from m_calendar + + + + + + + select count(*) from m_calendar + + + + + + + select count(*) from m_calendar where created_by is null or last_modified_by is null + + + + +