FINERACT-1670: Add auditable fields to Calendar
This commit is contained in:
committed by
Aleksandar Vidakovic
parent
e47e2cd1e3
commit
656ecdef9f
+9
-8
@@ -21,6 +21,7 @@ package org.apache.fineract.portfolio.calendar.data;
|
|||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
|
import java.time.OffsetDateTime;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@@ -65,8 +66,8 @@ public final class CalendarData implements Serializable {
|
|||||||
private final String humanReadable;
|
private final String humanReadable;
|
||||||
private final LocalDate recentEligibleMeetingDate;
|
private final LocalDate recentEligibleMeetingDate;
|
||||||
|
|
||||||
private final LocalDate createdDate;
|
private final OffsetDateTime createdDate;
|
||||||
private final LocalDate lastUpdatedDate;
|
private final OffsetDateTime lastUpdatedDate;
|
||||||
private final Long createdByUserId;
|
private final Long createdByUserId;
|
||||||
private final String createdByUsername;
|
private final String createdByUsername;
|
||||||
private final Long lastUpdatedByUserId;
|
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 Integer duration, final EnumOptionData type, final boolean repeating, final String recurrence,
|
||||||
final EnumOptionData frequency, final Integer interval, final EnumOptionData repeatsOnDay,
|
final EnumOptionData frequency, final Integer interval, final EnumOptionData repeatsOnDay,
|
||||||
final EnumOptionData repeatsOnNthDayOfMonth, final EnumOptionData remindBy, final Integer firstReminder,
|
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 Long createdByUserId, final String createdByUsername, final Long lastUpdatedByUserId, final String lastUpdatedByUsername,
|
||||||
final LocalTime meetingTime, final Integer repeatsOnDayOfMonth) {
|
final LocalTime meetingTime, final Integer repeatsOnDayOfMonth) {
|
||||||
|
|
||||||
@@ -287,8 +288,8 @@ public final class CalendarData implements Serializable {
|
|||||||
final List<EnumOptionData> repeatsOnDayOptions = null;
|
final List<EnumOptionData> repeatsOnDayOptions = null;
|
||||||
final List<EnumOptionData> frequencyNthDayTypeOptions = null;
|
final List<EnumOptionData> frequencyNthDayTypeOptions = null;
|
||||||
|
|
||||||
final LocalDate createdDate = null;
|
final OffsetDateTime createdDate = null;
|
||||||
final LocalDate lastUpdatedDate = null;
|
final OffsetDateTime lastUpdatedDate = null;
|
||||||
final Long createdByUserId = null;
|
final Long createdByUserId = null;
|
||||||
final String createdByUsername = null;
|
final String createdByUsername = null;
|
||||||
final Long lastUpdatedByUserId = 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 frequency, final Integer interval, final EnumOptionData repeatsOnDay,
|
||||||
final EnumOptionData repeatsOnNthDayOfMonth, final EnumOptionData remindBy, final Integer firstReminder,
|
final EnumOptionData repeatsOnNthDayOfMonth, final EnumOptionData remindBy, final Integer firstReminder,
|
||||||
final Integer secondReminder, final Collection<LocalDate> recurringDates, final Collection<LocalDate> nextTenRecurringDates,
|
final Integer secondReminder, final Collection<LocalDate> recurringDates, final Collection<LocalDate> nextTenRecurringDates,
|
||||||
final String humanReadable, final LocalDate recentEligibleMeetingDate, final LocalDate createdDate,
|
final String humanReadable, final LocalDate recentEligibleMeetingDate, final OffsetDateTime createdDate,
|
||||||
final LocalDate lastUpdatedDate, final Long createdByUserId, final String createdByUsername, final Long lastUpdatedByUserId,
|
final OffsetDateTime lastUpdatedDate, final Long createdByUserId, final String createdByUsername, final Long lastUpdatedByUserId,
|
||||||
final String lastUpdatedByUsername, final Integer repeatsOnDayOfMonth, final List<EnumOptionData> entityTypeOptions,
|
final String lastUpdatedByUsername, final Integer repeatsOnDayOfMonth, final List<EnumOptionData> entityTypeOptions,
|
||||||
final List<EnumOptionData> calendarTypeOptions, final List<EnumOptionData> remindByOptions,
|
final List<EnumOptionData> calendarTypeOptions, final List<EnumOptionData> remindByOptions,
|
||||||
final List<EnumOptionData> repeatsOptions, final List<EnumOptionData> repeatsOnDayOptions, final LocalTime meetingTime,
|
final List<EnumOptionData> repeatsOptions, final List<EnumOptionData> repeatsOnDayOptions, final LocalTime meetingTime,
|
||||||
@@ -404,7 +405,7 @@ public final class CalendarData implements Serializable {
|
|||||||
return this.endDate;
|
return this.endDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LocalDate getCreatedDate() {
|
public OffsetDateTime getCreatedDate() {
|
||||||
return this.createdDate;
|
return this.createdDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -18,6 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.fineract.portfolio.calendar.domain;
|
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 static org.apache.fineract.portfolio.calendar.CalendarConstants.CALENDAR_RESOURCE_NAME;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
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.api.JsonCommand;
|
||||||
import org.apache.fineract.infrastructure.core.data.ApiParameterError;
|
import org.apache.fineract.infrastructure.core.data.ApiParameterError;
|
||||||
import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder;
|
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.exception.PlatformApiDataValidationException;
|
||||||
import org.apache.fineract.infrastructure.core.service.DateUtils;
|
import org.apache.fineract.infrastructure.core.service.DateUtils;
|
||||||
import org.apache.fineract.portfolio.calendar.CalendarConstants.CalendarSupportedParameters;
|
import org.apache.fineract.portfolio.calendar.CalendarConstants.CalendarSupportedParameters;
|
||||||
@@ -50,7 +50,7 @@ import org.apache.fineract.portfolio.common.domain.NthDayType;
|
|||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name = "m_calendar")
|
@Table(name = "m_calendar")
|
||||||
public class Calendar extends AbstractAuditableCustom {
|
public class Calendar extends AbstractAuditableWithUTCDateTimeCustom {
|
||||||
|
|
||||||
@Column(name = "title", length = 50, nullable = false)
|
@Column(name = "title", length = 50, nullable = false)
|
||||||
private String title;
|
private String title;
|
||||||
|
|||||||
+18
-7
@@ -21,7 +21,9 @@ package org.apache.fineract.portfolio.calendar.service;
|
|||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
|
import java.time.OffsetDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
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.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.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_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 "
|
+ " 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"
|
+ " 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
|
@Override
|
||||||
@@ -96,17 +99,25 @@ public class CalendarReadPlatformServiceImpl implements CalendarReadPlatformServ
|
|||||||
humanReadable = CalendarUtils.getRRuleReadable(startDate, recurrence);
|
humanReadable = CalendarUtils.getRRuleReadable(startDate, recurrence);
|
||||||
}
|
}
|
||||||
Integer monthOnDay = CalendarUtils.getMonthOnDay(recurrence);
|
Integer monthOnDay = CalendarUtils.getMonthOnDay(recurrence);
|
||||||
final LocalDate createdDate = JdbcSupport.getLocalDate(rs, "createdDate");
|
final LocalDateTime createdDateLocal = JdbcSupport.getLocalDateTime(rs, "createdDate");
|
||||||
final LocalDate lastUpdatedDate = JdbcSupport.getLocalDate(rs, "updatedDate");
|
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 Long createdByUserId = rs.getLong("creatingUserId");
|
||||||
final String createdByUserName = rs.getString("creatingUserName");
|
final String createdByUserName = rs.getString("creatingUserName");
|
||||||
final Long lastUpdatedByUserId = rs.getLong("updatingUserId");
|
final Long lastUpdatedByUserId = rs.getLong("updatingUserId");
|
||||||
final String lastUpdatedByUserName = rs.getString("updatingUserName");
|
final String lastUpdatedByUserName = rs.getString("updatingUserName");
|
||||||
final LocalTime meetingTime = JdbcSupport.getLocalTime(rs, "meetingTime");
|
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,
|
return CalendarData.instance(id, calendarInstanceId, entityId, entityType, title, description, location, startDate, endDate,
|
||||||
duration, type, repeating, recurrence, frequency, interval, repeatsOnDay, repeatsOnNthDayOfMonth, remindBy,
|
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);
|
lastUpdatedByUserId, lastUpdatedByUserName, meetingTime, monthOnDay);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -487,8 +498,8 @@ public class CalendarReadPlatformServiceImpl implements CalendarReadPlatformServ
|
|||||||
humanReadable = CalendarUtils.getRRuleReadable(startDate, recurrence);
|
humanReadable = CalendarUtils.getRRuleReadable(startDate, recurrence);
|
||||||
}
|
}
|
||||||
|
|
||||||
final LocalDate createdDate = null;
|
final OffsetDateTime createdDate = null;
|
||||||
final LocalDate lastUpdatedDate = null;
|
final OffsetDateTime lastUpdatedDate = null;
|
||||||
final Long createdByUserId = null;
|
final Long createdByUserId = null;
|
||||||
final String createdByUserName = null;
|
final String createdByUserName = null;
|
||||||
final Long lastUpdatedByUserId = 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/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/0031_add_audit_entries_to_client_identifier.xml" relativeToChangelogFile="true"/>
|
||||||
<include file="parts/0032_add_some_missing_indexes.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>
|
</databaseChangeLog>
|
||||||
|
|||||||
+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="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>
|
||||||
Reference in New Issue
Block a user