FINERACT-1670: Add auditable fields to Calendar

This commit is contained in:
Adam Saghy
2022-08-09 10:42:21 +02:00
committed by Aleksandar Vidakovic
parent e47e2cd1e3
commit 656ecdef9f
7 changed files with 109 additions and 18 deletions
@@ -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;
}
@@ -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;
@@ -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;
@@ -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>
@@ -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="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="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="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="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="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_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="calendar-5" author="fineract" context="mysql">
<preConditions onFail="MARK_RAN">
<sqlCheck expectedResult="0">select count(*) from m_calendar</sqlCheck>
</preConditions>
<addNotNullConstraint tableName="m_calendar" columnName="created_on_utc" columnDataType="DATETIME"/>
<addNotNullConstraint tableName="m_calendar" columnName="last_modified_on_utc" columnDataType="DATETIME"/>
</changeSet>
<changeSet id="calendar-5" author="fineract" context="postgresql">
<preConditions onFail="MARK_RAN">
<sqlCheck expectedResult="0">select count(*) from m_calendar</sqlCheck>
</preConditions>
<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="calendar-6" author="fineract">
<preConditions onFail="MARK_RAN">
<sqlCheck expectedResult="0">select count(*) from m_calendar where created_by is null or last_modified_by is null</sqlCheck>
</preConditions>
<addNotNullConstraint tableName="m_calendar" columnName="created_by" columnDataType="BIGINT"/>
<addNotNullConstraint tableName="m_calendar" columnName="last_modified_by" columnDataType="BIGINT"/>
</changeSet>
</databaseChangeLog>