Repository: incubator-fineract
Updated Branches:
  refs/heads/develop 8dfec9a37 -> 446ff4403


Capturing Time


Project: http://git-wip-us.apache.org/repos/asf/incubator-fineract/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-fineract/commit/5178d3a8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-fineract/tree/5178d3a8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-fineract/diff/5178d3a8

Branch: refs/heads/develop
Commit: 5178d3a8bfa3d52ca27f6e3e43d361bf9a81a03e
Parents: 8dfec9a
Author: Koustav Muhuri <[email protected]>
Authored: Thu Mar 24 17:44:01 2016 +0530
Committer: Koustav Muhuri <[email protected]>
Committed: Fri Apr 1 13:00:13 2016 +0530

----------------------------------------------------------------------
 .../infrastructure/core/api/JsonCommand.java    | 37 ++++++++++++
 .../core/data/DataValidatorBuilder.java         |  3 +-
 .../infrastructure/core/domain/JdbcSupport.java | 10 +++-
 .../core/serialization/FromJsonHelper.java      |  7 ++-
 .../core/serialization/JsonParserHelper.java    | 62 ++++++++++++++++++++
 .../portfolio/calendar/CalendarConstants.java   |  2 +-
 .../portfolio/calendar/data/CalendarData.java   | 21 ++++---
 .../portfolio/calendar/domain/Calendar.java     | 43 ++++++++++++--
 .../CalendarCommandFromApiJsonDeserializer.java | 14 ++++-
 .../CalendarReadPlatformServiceImpl.java        |  9 ++-
 ...arWritePlatformServiceJpaRepositoryImpl.java |  5 +-
 .../service/CenterReadPlatformServiceImpl.java  |  6 +-
 .../service/LoanScheduleAssembler.java          |  1 +
 ...onWritePlatformServiceJpaRepositoryImpl.java |  3 +-
 ...ssWritePlatformServiceJpaRepositoryImpl.java |  2 +
 .../V295__Adding_Meeting_Time_column.sql        |  1 +
 16 files changed, 199 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5178d3a8/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JsonCommand.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JsonCommand.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JsonCommand.java
index cc04657..488e7ba 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JsonCommand.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JsonCommand.java
@@ -33,10 +33,14 @@ import 
org.apache.fineract.infrastructure.security.domain.BasicPasswordEncodable
 import org.apache.fineract.infrastructure.security.domain.PlatformUser;
 import 
org.apache.fineract.infrastructure.security.service.PlatformPasswordEncoder;
 import org.joda.time.LocalDate;
+import org.joda.time.LocalDateTime;
 import org.joda.time.MonthDay;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
 
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
+import com.google.gson.JsonPrimitive;
 import com.google.gson.reflect.TypeToken;
 
 /**
@@ -175,6 +179,18 @@ public final class JsonCommand {
         return this.productId;
     }
 
+    private boolean differenceExistsTime(final LocalDateTime baseValue, final 
LocalDateTime workingCopyValue) {
+        boolean differenceExists = false;
+
+        if (baseValue != null) {
+            differenceExists = !baseValue.equals(workingCopyValue);
+        } else {
+            differenceExists = workingCopyValue != null;
+        }
+
+        return differenceExists;
+    }
+    
     private boolean differenceExists(final LocalDate baseValue, final 
LocalDate workingCopyValue) {
         boolean differenceExists = false;
 
@@ -285,7 +301,25 @@ public final class JsonCommand {
         }
         return isChangeInLocalDateParameterNamed(parameterName, localDate);
     }
+    
+    public boolean isChangeInTimeParameterNamed(final String parameterName, 
final Date existingValue,final String timeFormat) {
+        LocalDateTime time = null;
+        if (existingValue != null) {
+            DateTimeFormatter timeFormtter = 
DateTimeFormat.forPattern(timeFormat);
+            time = LocalDateTime.parse(existingValue.toString(), timeFormtter);
+        }
+        return isChangeInLocalTimeParameterNamed(parameterName, time);
+    }
 
+    public boolean isChangeInLocalTimeParameterNamed(final String 
parameterName, final LocalDateTime existingValue) {
+        boolean isChanged = false;
+        if (parameterExists(parameterName)) {
+            final LocalDateTime workingValue = 
localTimeValueOfParameterNamed(parameterName);
+            isChanged = differenceExistsTime(existingValue, workingValue);
+        }
+        return isChanged;
+    }
+    
     public boolean isChangeInLocalDateParameterNamed(final String 
parameterName, final LocalDate existingValue) {
         boolean isChanged = false;
         if (parameterExists(parameterName)) {
@@ -298,6 +332,9 @@ public final class JsonCommand {
     public LocalDate localDateValueOfParameterNamed(final String 
parameterName) {
         return this.fromApiJsonHelper.extractLocalDateNamed(parameterName, 
this.parsedCommand);
     }
+    public LocalDateTime localTimeValueOfParameterNamed(final String 
parameterName) {
+        return this.fromApiJsonHelper.extractLocalTimeNamed(parameterName, 
this.parsedCommand);
+    }
 
     public MonthDay extractMonthDayNamed(final String parameterName) {
         return this.fromApiJsonHelper.extractMonthDayNamed(parameterName, 
this.parsedCommand);

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5178d3a8/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/DataValidatorBuilder.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/DataValidatorBuilder.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/DataValidatorBuilder.java
index 0d819fe..e628619 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/DataValidatorBuilder.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/DataValidatorBuilder.java
@@ -25,7 +25,6 @@ import org.apache.commons.lang.StringUtils;
 import org.joda.time.LocalDate;
 import org.quartz.CronExpression;
 import org.springframework.util.ObjectUtils;
-
 import java.math.BigDecimal;
 import java.text.ParseException;
 import java.util.Arrays;
@@ -203,7 +202,7 @@ public class DataValidatorBuilder {
         }
         return this;
     }
-
+   
     public DataValidatorBuilder notExceedingLengthOf(final Integer maxLength) {
         if (this.value == null && this.ignoreNullValue) { return this; }
 

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5178d3a8/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/JdbcSupport.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/JdbcSupport.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/JdbcSupport.java
index 759c22f..380a7fe 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/JdbcSupport.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/JdbcSupport.java
@@ -26,6 +26,7 @@ import java.util.Date;
 
 import org.joda.time.DateTime;
 import org.joda.time.LocalDate;
+import org.joda.time.LocalTime;
 import org.springframework.jdbc.support.JdbcUtils;
 
 /**
@@ -51,7 +52,14 @@ public class JdbcSupport {
         }
         return localDate;
     }
-
+    public static LocalTime getLocalTime(final ResultSet rs, final String 
columnName) throws SQLException {
+        LocalTime localTime = null;
+        final Date timeValue = rs.getTime(columnName);
+        if (timeValue != null) {
+            localTime = new LocalTime(timeValue);
+        }
+        return localTime;
+    } 
     public static Long getLong(final ResultSet rs, final String columnName) 
throws SQLException {
         return (Long) JdbcUtils.getResultSetValue(rs, 
rs.findColumn(columnName), Long.class);
     }

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5178d3a8/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/FromJsonHelper.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/FromJsonHelper.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/FromJsonHelper.java
index af2507f..93c9a5e 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/FromJsonHelper.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/FromJsonHelper.java
@@ -33,6 +33,7 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.fineract.infrastructure.core.exception.InvalidJsonException;
 import 
org.apache.fineract.infrastructure.core.exception.UnsupportedParameterException;
 import org.joda.time.LocalDate;
+import org.joda.time.LocalDateTime;
 import org.joda.time.MonthDay;
 import org.springframework.context.annotation.Primary;
 import org.springframework.stereotype.Component;
@@ -197,7 +198,11 @@ public class FromJsonHelper {
     public LocalDate extractLocalDateNamed(final String parameterName, final 
JsonElement element) {
         return this.helperDelegator.extractLocalDateNamed(parameterName, 
element, new HashSet<String>());
     }
-
+    
+    public LocalDateTime extractLocalTimeNamed(final String parameterName, 
final JsonElement element) {
+        return this.helperDelegator.extractLocalTimeNamed(parameterName, 
element, new HashSet<String>());
+    }
+    
     public LocalDate extractLocalDateNamed(final String parameterName, final 
JsonElement element, final String dateFormat,
             final Locale locale) {
         return this.helperDelegator.extractLocalDateNamed(parameterName, 
element.getAsJsonObject(), dateFormat, locale,

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5178d3a8/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/JsonParserHelper.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/JsonParserHelper.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/JsonParserHelper.java
index c70d805..2ce0b00 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/JsonParserHelper.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/JsonParserHelper.java
@@ -197,6 +197,20 @@ public class JsonParserHelper {
         }
         return value;
     }
+    
+    public String extractTimeFormatParameter(final JsonObject element) {
+        String value = null;
+        if (element.isJsonObject()) {
+            final JsonObject object = element.getAsJsonObject();
+
+            final String timeFormatParameter = "timeFormat";
+            if (object.has(timeFormatParameter) && 
object.get(timeFormatParameter).isJsonPrimitive()) {
+                final JsonPrimitive primitive = 
object.get(timeFormatParameter).getAsJsonPrimitive();
+                value = primitive.getAsString();
+            }
+        }
+        return value;
+    }
 
     public String extractMonthDayFormatParameter(final JsonObject element) {
         String value = null;
@@ -343,6 +357,54 @@ public class JsonParserHelper {
         }
         return value;
     }
+    
+    public LocalDateTime extractLocalTimeNamed(final String parameterName, 
final JsonElement element,
+            final Set<String> parametersPassedInCommand) {
+
+        LocalDateTime value = null;
+
+        if (element.isJsonObject()) {
+            final JsonObject object = element.getAsJsonObject();
+
+            final String timeFormat = extractTimeFormatParameter(object);
+            final Locale clientApplicationLocale = 
extractLocaleParameter(object);
+            value = extractLocalTimeNamed(parameterName, object, timeFormat, 
clientApplicationLocale, parametersPassedInCommand);
+        }
+        return value;
+    }
+    
+    public LocalDateTime extractLocalTimeNamed(final String parameterName, 
final JsonObject element, final String timeFormat,
+            final Locale clientApplicationLocale, final Set<String> 
parametersPassedInCommand) {
+        LocalDateTime value = null;
+        String timeValueAsString=null;
+        if (element.isJsonObject()) {
+            final JsonObject object = element.getAsJsonObject();
+            if (object.has(parameterName) && 
object.get(parameterName).isJsonPrimitive()) {
+                parametersPassedInCommand.add(parameterName);
+                
+                try{
+                    DateTimeFormatter timeFormtter = 
DateTimeFormat.forPattern(timeFormat);
+                    final JsonPrimitive primitive = 
object.get(parameterName).getAsJsonPrimitive();
+                     timeValueAsString = primitive.getAsString();
+                    if (StringUtils.isNotBlank(timeValueAsString)) {
+                        value = LocalDateTime.parse(timeValueAsString, 
timeFormtter);
+                    }    
+                }
+                catch(IllegalArgumentException e ){
+                    final List<ApiParameterError> dataValidationErrors = new 
ArrayList<>();
+                    final String defaultMessage = new StringBuilder("The 
parameter '" + timeValueAsString
+                            + "' is not in correct format.").toString();
+                    final ApiParameterError error = 
ApiParameterError.parameterError("validation.msg.invalid.TimeFormat", 
defaultMessage,
+                            parameterName);
+                    dataValidationErrors.add(error);
+                    throw new 
PlatformApiDataValidationException("validation.msg.validation.errors.exist", 
"Validation errors exist.",
+                            dataValidationErrors);
+                }
+                
+            }
+        }
+        return value;
+    }
 
     public LocalDate extractLocalDateNamed(final String parameterName, final 
JsonObject element, final String dateFormat,
             final Locale clientApplicationLocale, final Set<String> 
parametersPassedInCommand) {

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5178d3a8/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/CalendarConstants.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/CalendarConstants.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/CalendarConstants.java
index 02e9162..a15a71b 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/CalendarConstants.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/CalendarConstants.java
@@ -31,7 +31,7 @@ public class CalendarConstants {
                 "typeId"), REPEATING("repeating"), REMIND_BY_ID("remindById"), 
FIRST_REMINDER("firstReminder"), SECOND_REMINDER(
                 "secondReminder"), LOCALE("locale"), 
DATE_FORMAT("dateFormat"), FREQUENCY("frequency"), INTERVAL("interval"), 
REPEATS_ON_DAY(
                 "repeatsOnDay"), 
RESCHEDULE_BASED_ON_MEETING_DATES("reschedulebasedOnMeetingDates"), 
PRESENT_MEETING_DATE(
-                "presentMeetingDate"), NEW_MEETING_DATE("newMeetingDate"), ;
+                "presentMeetingDate"), 
NEW_MEETING_DATE("newMeetingDate"),MEETING_TIME("meetingtime"),Time_Format("timeFormat"),
 ;
 
         private final String value;
 

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5178d3a8/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/data/CalendarData.java
----------------------------------------------------------------------
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 6151743..de89923 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
@@ -29,6 +29,7 @@ import 
org.apache.fineract.portfolio.calendar.domain.CalendarWeekDaysType;
 import org.apache.fineract.portfolio.calendar.service.CalendarEnumerations;
 import org.apache.fineract.portfolio.calendar.service.CalendarUtils;
 import org.joda.time.LocalDate;
+import org.joda.time.LocalTime;
 
 /**
  * Immutable data object representing a Calendar.
@@ -44,6 +45,7 @@ public class CalendarData {
     private final String location;
     private final LocalDate startDate;
     private final LocalDate endDate;
+    private final LocalTime meetingTime;
     private final Integer duration;
     private final EnumOptionData type;
     private final boolean repeating;
@@ -65,21 +67,20 @@ public class CalendarData {
     private final String createdByUsername;
     private final Long lastUpdatedByUserId;
     private final String lastUpdatedByUsername;
-
     // template related
     final List<EnumOptionData> entityTypeOptions;
     final List<EnumOptionData> calendarTypeOptions;
     final List<EnumOptionData> remindByOptions;
     final List<EnumOptionData> frequencyOptions;
     final List<EnumOptionData> repeatsOnDayOptions;
-
+ 
     public static CalendarData instance(final Long id, final Long 
calendarInstanceId, final Long entityId, final EnumOptionData entityType,
             final String title, final String description, final String 
location, final LocalDate startDate, final LocalDate endDate,
             final Integer duration, final EnumOptionData type, final boolean 
repeating, final String recurrence,
             final EnumOptionData frequency, final Integer interval, final 
EnumOptionData repeatsOnDay, final EnumOptionData remindBy,
             final Integer firstReminder, final Integer secondReminder, final 
String humanReadable, final LocalDate createdDate,
             final LocalDate lastUpdatedDate, final Long createdByUserId, final 
String createdByUsername, final Long lastUpdatedByUserId,
-            final String lastUpdatedByUsername) {
+            final String lastUpdatedByUsername, final LocalTime meetingTime) {
 
         final Collection<LocalDate> recurringDates = null;
         final Collection<LocalDate> nextTenRecurringDates = null;
@@ -95,7 +96,7 @@ public class CalendarData {
                 type, repeating, recurrence, frequency, interval, 
repeatsOnDay, remindBy, firstReminder, secondReminder, recurringDates,
                 nextTenRecurringDates, humanReadable, 
recentEligibleMeetingDate, createdDate, lastUpdatedDate, createdByUserId,
                 createdByUsername, lastUpdatedByUserId, lastUpdatedByUsername, 
entityTypeOptions, calendarTypeOptions, remindByOptions,
-                frequencyOptions, repeatsOnDayOptions);
+                frequencyOptions, repeatsOnDayOptions, meetingTime);
     }
 
     public static CalendarData withRecurringDates(final CalendarData 
calendarData, final Collection<LocalDate> recurringDates,
@@ -108,7 +109,7 @@ public class CalendarData {
                 calendarData.createdDate, calendarData.lastUpdatedDate, 
calendarData.createdByUserId, calendarData.createdByUsername,
                 calendarData.lastUpdatedByUserId, 
calendarData.lastUpdatedByUsername, calendarData.entityTypeOptions,
                 calendarData.calendarTypeOptions, 
calendarData.remindByOptions, calendarData.frequencyOptions,
-                calendarData.repeatsOnDayOptions);
+                calendarData.repeatsOnDayOptions,calendarData.meetingTime);
     }
 
     public static CalendarData withRecentEligibleMeetingDate(final 
CalendarData calendarData, final LocalDate recentEligibleMeetingDate) {
@@ -120,7 +121,7 @@ public class CalendarData {
                 recentEligibleMeetingDate, calendarData.createdDate, 
calendarData.lastUpdatedDate, calendarData.createdByUserId,
                 calendarData.createdByUsername, 
calendarData.lastUpdatedByUserId, calendarData.lastUpdatedByUsername,
                 calendarData.entityTypeOptions, 
calendarData.calendarTypeOptions, calendarData.remindByOptions,
-                calendarData.frequencyOptions, 
calendarData.repeatsOnDayOptions);
+                calendarData.frequencyOptions, 
calendarData.repeatsOnDayOptions,calendarData.meetingTime);
     }
 
     public static CalendarData sensibleDefaultsForNewCalendarCreation() {
@@ -160,12 +161,13 @@ public class CalendarData {
         final String createdByUsername = null;
         final Long lastUpdatedByUserId = null;
         final String lastUpdatedByUsername = null;
+        final LocalTime meetingTime = null;
 
         return new CalendarData(id, calendarInstanceId, entityId, entityType, 
title, description, location, startDate, endDate, duration,
                 type, repeating, recurrence, frequency, interval, 
repeatsOnDay, remindBy, firstReminder, secondReminder, recurringDates,
                 nextTenRecurringDates, humanReadable, 
recentEligibleMeetingDate, createdDate, lastUpdatedDate, createdByUserId,
                 createdByUsername, lastUpdatedByUserId, lastUpdatedByUsername, 
entityTypeOptions, calendarTypeOptions, remindByOptions,
-                frequencyOptions, repeatsOnDayOptions);
+                frequencyOptions, repeatsOnDayOptions, meetingTime);
     }
 
     public static CalendarData withTemplateOptions(final CalendarData 
calendarData, final List<EnumOptionData> entityTypeOptions,
@@ -180,7 +182,7 @@ public class CalendarData {
                 calendarData.recentEligibleMeetingDate, 
calendarData.createdDate, calendarData.lastUpdatedDate,
                 calendarData.createdByUserId, calendarData.createdByUsername, 
calendarData.lastUpdatedByUserId,
                 calendarData.lastUpdatedByUsername, entityTypeOptions, 
calendarTypeOptions, remindByOptions, repeatsOptions,
-                repeatsOnDayOptions);
+                repeatsOnDayOptions,calendarData.meetingTime);
     }
 
     private CalendarData(final Long id, final Long calendarInstanceId, final 
Long entityId, final EnumOptionData entityType,
@@ -192,7 +194,7 @@ public class CalendarData {
             final LocalDate createdDate, final LocalDate lastUpdatedDate, 
final Long createdByUserId, final String createdByUsername,
             final Long lastUpdatedByUserId, final String 
lastUpdatedByUsername, final List<EnumOptionData> entityTypeOptions,
             final List<EnumOptionData> calendarTypeOptions, final 
List<EnumOptionData> remindByOptions,
-            final List<EnumOptionData> repeatsOptions, final 
List<EnumOptionData> repeatsOnDayOptions) {
+            final List<EnumOptionData> repeatsOptions, final 
List<EnumOptionData> repeatsOnDayOptions,final LocalTime meetingTime) {
         this.id = id;
         this.calendarInstanceId = calendarInstanceId;
         this.entityId = entityId;
@@ -227,6 +229,7 @@ public class CalendarData {
         this.remindByOptions = remindByOptions;
         this.frequencyOptions = repeatsOptions;
         this.repeatsOnDayOptions = repeatsOnDayOptions;
+        this.meetingTime = meetingTime;
     }
 
     public Long getId() {

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5178d3a8/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/Calendar.java
----------------------------------------------------------------------
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 8be58ec..f44dfdd 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
@@ -49,7 +49,13 @@ import 
org.apache.fineract.portfolio.calendar.exception.CalendarDateException;
 import 
org.apache.fineract.portfolio.calendar.exception.CalendarParameterUpdateNotSupportedException;
 import org.apache.fineract.portfolio.calendar.service.CalendarUtils;
 import org.apache.fineract.useradministration.domain.AppUser;
+import org.apache.poi.openxml4j.util.Nullable;
 import org.joda.time.LocalDate;
+import org.joda.time.LocalDateTime;
+import org.joda.time.LocalTime;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
 
 @Entity
 @Table(name = "m_calendar")
@@ -92,7 +98,11 @@ public class Calendar extends 
AbstractAuditableCustom<AppUser, Long> {
 
     @Column(name = "second_reminder", nullable = true)
     private Integer secondReminder;
-
+    
+    @Column(name="meeting_time",nullable=true)
+    @Temporal(TemporalType.TIME)
+    private Date meetingtime;
+    
     @OneToMany(fetch = FetchType.EAGER)
     @JoinColumn(name = "calendar_id")
     private Set<CalendarHistory> calendarHistory = new HashSet<>();
@@ -103,7 +113,7 @@ public class Calendar extends 
AbstractAuditableCustom<AppUser, Long> {
 
     public Calendar(final String title, final String description, final String 
location, final LocalDate startDate,
             final LocalDate endDate, final Integer duration, final Integer 
typeId, final boolean repeating, final String recurrence,
-            final Integer remindById, final Integer firstReminder, final 
Integer secondReminder) {
+            final Integer remindById, final Integer firstReminder, final 
Integer secondReminder,final Date meetingtime) {
 
         final List<ApiParameterError> dataValidationErrors = new ArrayList<>();
         final DataValidatorBuilder baseDataValidator = new 
DataValidatorBuilder(dataValidationErrors).resource(CALENDAR_RESOURCE_NAME);
@@ -138,6 +148,7 @@ public class Calendar extends 
AbstractAuditableCustom<AppUser, Long> {
         this.remindById = remindById;
         this.firstReminder = firstReminder;
         this.secondReminder = secondReminder;
+        this.meetingtime=meetingtime;
     }
 
     public static Calendar createRepeatingCalendar(final String title, final 
LocalDate startDate, final Integer typeId,
@@ -156,8 +167,9 @@ public class Calendar extends 
AbstractAuditableCustom<AppUser, Long> {
         final Integer remindById = null;
         final Integer firstReminder = null;
         final Integer secondReminder = null;
+        final Date meetingtime=null;
         return new Calendar(title, description, location, startDate, endDate, 
duration, typeId, repeating, recurrence, remindById,
-                firstReminder, secondReminder);
+                firstReminder, secondReminder,meetingtime);
     }
 
     public static Calendar fromJson(final JsonCommand command) {
@@ -165,6 +177,7 @@ public class Calendar extends 
AbstractAuditableCustom<AppUser, Long> {
         // final Long entityId = command.getSupportedEntityId();
         // final Integer entityTypeId =
         // 
CalendarEntityType.valueOf(command.getSupportedEntityType().toUpperCase()).getValue();
+        Date meetingtime=null;
         final String title = 
command.stringValueOfParameterNamed(CALENDAR_SUPPORTED_PARAMETERS.TITLE.getValue());
         final String description = 
command.stringValueOfParameterNamed(CALENDAR_SUPPORTED_PARAMETERS.DESCRIPTION.getValue());
         final String location = 
command.stringValueOfParameterNamed(CALENDAR_SUPPORTED_PARAMETERS.LOCATION.getValue());
@@ -178,10 +191,14 @@ public class Calendar extends 
AbstractAuditableCustom<AppUser, Long> {
                 .getValue());
         final Integer secondReminder = 
command.integerValueSansLocaleOfParameterNamed(CALENDAR_SUPPORTED_PARAMETERS.SECOND_REMINDER
                 .getValue());
+       final LocalDateTime time= 
command.localTimeValueOfParameterNamed(CALENDAR_SUPPORTED_PARAMETERS.MEETING_TIME.getValue());
+       if(time!=null){
+        meetingtime=time.toDate();
+       }
         final String recurrence = Calendar.constructRecurrence(command, null);
 
         return new Calendar(title, description, location, startDate, endDate, 
duration, typeId, repeating, recurrence, remindById,
-                firstReminder, secondReminder);
+                firstReminder, secondReminder,meetingtime);
     }
 
     public Map<String, Object> updateStartDateAndDerivedFeilds(final LocalDate 
newMeetingStartDate) {
@@ -387,7 +404,19 @@ public class Calendar extends 
AbstractAuditableCustom<AppUser, Long> {
             actualChanges.put(secondRemindarParamName, newValue);
             this.secondReminder = newValue;
         }
-
+        
+        final String timeFormat = 
command.stringValueOfParameterNamed(CALENDAR_SUPPORTED_PARAMETERS.Time_Format.getValue());
+        final String time = 
CALENDAR_SUPPORTED_PARAMETERS.MEETING_TIME.getValue();
+        if 
(command.isChangeInTimeParameterNamed(CALENDAR_SUPPORTED_PARAMETERS.MEETING_TIME.getValue(),
 this.meetingtime,timeFormat)) {
+            final String newValue = 
command.stringValueOfParameterNamed(CALENDAR_SUPPORTED_PARAMETERS.MEETING_TIME.getValue());
+            
actualChanges.put(CALENDAR_SUPPORTED_PARAMETERS.MEETING_TIME.getValue(), 
newValue);
+            LocalDateTime 
timeInLocalDateTimeFormat=command.localTimeValueOfParameterNamed(time);
+            if(timeInLocalDateTimeFormat!=null){
+            this.meetingtime= timeInLocalDateTimeFormat.toDate();
+            }
+           
+        }
+        
         return actualChanges;
     }
 
@@ -458,6 +487,10 @@ public class Calendar extends 
AbstractAuditableCustom<AppUser, Long> {
     public Integer getSecondReminder() {
         return this.secondReminder;
     }
+    
+    public Date getMeetingTime(){
+        return this.meetingtime;
+    }
 
     public LocalDate getStartDateLocalDate() {
         LocalDate startDateLocalDate = null;

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5178d3a8/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/serialization/CalendarCommandFromApiJsonDeserializer.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/serialization/CalendarCommandFromApiJsonDeserializer.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/serialization/CalendarCommandFromApiJsonDeserializer.java
index 8a7c2bb..c956afa 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/serialization/CalendarCommandFromApiJsonDeserializer.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/serialization/CalendarCommandFromApiJsonDeserializer.java
@@ -38,6 +38,7 @@ import 
org.apache.fineract.portfolio.calendar.domain.CalendarFrequencyType;
 import org.apache.fineract.portfolio.calendar.domain.CalendarRemindBy;
 import org.apache.fineract.portfolio.calendar.domain.CalendarWeekDaysType;
 import org.joda.time.LocalDate;
+import org.joda.time.LocalDateTime;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -196,6 +197,12 @@ public class CalendarCommandFromApiJsonDeserializer 
extends AbstractFromApiJsonD
             
baseDataValidator.reset().parameter(CALENDAR_SUPPORTED_PARAMETERS.SECOND_REMINDER.getValue()).value(secondReminder)
                     .ignoreIfNull().integerGreaterThanZero();
         }
+        if 
(this.fromApiJsonHelper.parameterExists(CALENDAR_SUPPORTED_PARAMETERS.MEETING_TIME.getValue(),
 element)) {
+            final LocalDateTime meetingTime = 
this.fromApiJsonHelper.extractLocalTimeNamed(CALENDAR_SUPPORTED_PARAMETERS.MEETING_TIME.getValue(),
+                    element);
+            
baseDataValidator.reset().parameter(CALENDAR_SUPPORTED_PARAMETERS.MEETING_TIME.getValue()).value(meetingTime).ignoreIfNull();
+        }
+                          
 
         if (!dataValidationErrors.isEmpty()) { throw new 
PlatformApiDataValidationException("validation.msg.validation.errors.exist",
                 "Validation errors exist.", dataValidationErrors); }
@@ -327,7 +334,12 @@ public class CalendarCommandFromApiJsonDeserializer 
extends AbstractFromApiJsonD
             
baseDataValidator.reset().parameter(CALENDAR_SUPPORTED_PARAMETERS.SECOND_REMINDER.getValue()).value(secondReminder)
                     .ignoreIfNull();
         }
-
+        if 
(this.fromApiJsonHelper.parameterExists(CALENDAR_SUPPORTED_PARAMETERS.MEETING_TIME.getValue(),
 element)) {
+            final LocalDateTime startDate = 
this.fromApiJsonHelper.extractLocalTimeNamed(CALENDAR_SUPPORTED_PARAMETERS.MEETING_TIME.getValue(),
+                    element);
+            
baseDataValidator.reset().parameter(CALENDAR_SUPPORTED_PARAMETERS.MEETING_TIME.getValue()).value(startDate).ignoreIfNull();
+        }
+       
         if (!dataValidationErrors.isEmpty()) { throw new 
PlatformApiDataValidationException("validation.msg.validation.errors.exist",
                 "Validation errors exist.", dataValidationErrors); }
     }

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5178d3a8/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarReadPlatformServiceImpl.java
----------------------------------------------------------------------
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 d86b7eb..3b5c37c 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
@@ -35,6 +35,7 @@ import 
org.apache.fineract.portfolio.calendar.domain.CalendarType;
 import 
org.apache.fineract.portfolio.calendar.exception.CalendarNotFoundException;
 import org.apache.fineract.portfolio.meeting.data.MeetingData;
 import org.joda.time.LocalDate;
+import org.joda.time.LocalTime;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.dao.EmptyResultDataAccessException;
 import org.springframework.jdbc.core.JdbcTemplate;
@@ -62,7 +63,7 @@ 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, "
-                    + " updatingUser.id as updatingUserId, 
updatingUser.username as updatingUserName "
+                    + " 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 ";
         }
@@ -106,11 +107,12 @@ public class CalendarReadPlatformServiceImpl implements 
CalendarReadPlatformServ
             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");
 
             return CalendarData.instance(id, calendarInstanceId, entityId, 
entityType, title, description, location, startDate, endDate,
                     duration, type, repeating, recurrence, frequency, 
interval, repeatsOnDay, remindBy, firstReminder, secondReminder,
                     humanReadable, createdDate, lastUpdatedDate, 
createdByUserId, createdByUserName, lastUpdatedByUserId,
-                    lastUpdatedByUserName);
+                    lastUpdatedByUserName,meetingTime);
         }
     }
 
@@ -495,11 +497,12 @@ public class CalendarReadPlatformServiceImpl implements 
CalendarReadPlatformServ
             final String createdByUserName = null;
             final Long lastUpdatedByUserId = null;
             final String lastUpdatedByUserName = null;
+            final LocalTime meetingTime = null;
 
             return CalendarData.instance(id, calendarInstanceId, entityId, 
entityType, title, description, location, startDate, endDate,
                     duration, type, repeating, recurrence, frequency, 
interval, repeatsOnDay, remindBy, firstReminder, secondReminder,
                     humanReadable, createdDate, lastUpdatedDate, 
createdByUserId, createdByUserName, lastUpdatedByUserId,
-                    lastUpdatedByUserName);
+                    lastUpdatedByUserName, meetingTime);
         }
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5178d3a8/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarWritePlatformServiceJpaRepositoryImpl.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarWritePlatformServiceJpaRepositoryImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarWritePlatformServiceJpaRepositoryImpl.java
index 438c687..c987bd7 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarWritePlatformServiceJpaRepositoryImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarWritePlatformServiceJpaRepositoryImpl.java
@@ -270,7 +270,7 @@ public class CalendarWritePlatformServiceJpaRepositoryImpl 
implements CalendarWr
         LocalDate presentMeetingDate = null;
         
         if (reschedulebasedOnMeetingDates != null && 
reschedulebasedOnMeetingDates) {
-
+            
             newMeetingDate = 
command.localDateValueOfParameterNamed(CALENDAR_SUPPORTED_PARAMETERS.NEW_MEETING_DATE.getValue());
             presentMeetingDate = 
command.localDateValueOfParameterNamed(CALENDAR_SUPPORTED_PARAMETERS.PRESENT_MEETING_DATE.getValue());
 
@@ -288,6 +288,9 @@ public class CalendarWritePlatformServiceJpaRepositoryImpl 
implements CalendarWr
         if (!changes.isEmpty()) {
             // update calendar history table only if there is a change in
             // calendar start date.
+            if (reschedulebasedOnMeetingDates == null){
+            presentMeetingDate = 
command.localDateValueOfParameterNamed(CALENDAR_SUPPORTED_PARAMETERS.START_DATE.getValue());
+            }
             final Date endDate = presentMeetingDate.minusDays(1).toDate();
             calendarHistory.updateEndDate(endDate);
             this.calendarHistoryRepository.save(calendarHistory);

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5178d3a8/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/CenterReadPlatformServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/CenterReadPlatformServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/CenterReadPlatformServiceImpl.java
index f19148f..c44b8e4 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/CenterReadPlatformServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/CenterReadPlatformServiceImpl.java
@@ -65,6 +65,7 @@ import 
org.apache.fineract.portfolio.group.domain.GroupingTypeEnumerations;
 import org.apache.fineract.portfolio.group.exception.CenterNotFoundException;
 import org.apache.fineract.useradministration.domain.AppUser;
 import org.joda.time.LocalDate;
+import org.joda.time.LocalTime;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.dao.EmptyResultDataAccessException;
 import org.springframework.jdbc.core.JdbcTemplate;
@@ -234,7 +235,7 @@ public class CenterReadPlatformServiceImpl implements 
CenterReadPlatformService
                     + " g.status_enum as statusEnum, g.activation_date as 
activationDate, g.hierarchy as hierarchy,  "
                     + " c.id as calendarId, ci.id as calendarInstanceId, 
ci.entity_id as entityId,  "
                     + " ci.entity_type_enum as entityTypeId, c.title as title, 
 c.description as description,  "
-                    + " c.location as location, c.start_date as startDate, 
c.end_date as endDate, c.recurrence as recurrence  "
+                    + " c.location as location, c.start_date as startDate, 
c.end_date as endDate, c.recurrence as recurrence,c.meeting_time as meetingTime 
 "
                     + " from m_calendar c join m_calendar_instance ci on 
ci.calendar_id=c.id and ci.entity_type_enum=4 join m_group g  "
                     + " on g.id = ci.entity_id join m_staff s on g.staff_id = 
s.id where g.office_id=? ";
         }
@@ -269,10 +270,11 @@ public class CenterReadPlatformServiceImpl implements 
CenterReadPlatformService
             final LocalDate startDate = JdbcSupport.getLocalDate(rs, 
"startDate");
             final LocalDate endDate = JdbcSupport.getLocalDate(rs, "endDate");
             final String recurrence = rs.getString("recurrence");
+            final LocalTime meetingTime = 
JdbcSupport.getLocalTime(rs,"meetingTime");
 
             CalendarData calendarData = CalendarData.instance(calendarId, 
calendarInstanceId, entityId, entityType, title, description,
                     location, startDate, endDate, null, null, false, 
recurrence, null, null, null, null, null, null, null, null, null,
-                    null, null, null, null);
+                    null, null, null, null,meetingTime);
             return CenterData.instance(id, accountNo, name, externalId, 
status, activationDate, officeId, null, staffId, staffName, hierarchy, null,
                     calendarData);
         }

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5178d3a8/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java
index fa29f9e..ee19e66 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java
@@ -115,6 +115,7 @@ import 
org.apache.fineract.portfolio.loanproduct.service.LoanEnumerations;
 import org.apache.fineract.useradministration.domain.AppUser;
 import org.joda.time.Days;
 import org.joda.time.LocalDate;
+import org.joda.time.LocalTime;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5178d3a8/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java
index 572b559..8d5ce19 100755
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java
@@ -108,6 +108,7 @@ import 
org.apache.fineract.portfolio.savings.domain.SavingsAccount;
 import org.apache.fineract.portfolio.savings.domain.SavingsAccountAssembler;
 import org.apache.fineract.useradministration.domain.AppUser;
 import org.joda.time.LocalDate;
+import org.joda.time.LocalTime;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -411,7 +412,7 @@ public class 
LoanApplicationWritePlatformServiceJpaRepositoryImpl implements Loa
             default:
             break;
         }
-
+         
         final Calendar calendar = Calendar.createRepeatingCalendar(title, 
calendarStartDate, CalendarType.COLLECTION.getValue(),
                 calendarFrequencyType, frequency, repeatsOnDay);
         final CalendarInstance calendarInstance = 
CalendarInstance.from(calendar, loan.loanInterestRecalculationDetails().getId(),

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5178d3a8/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl.java
index 9788bbd..2c105f4 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl.java
@@ -88,6 +88,7 @@ import 
org.apache.fineract.portfolio.savings.domain.SavingsProductRepository;
 import 
org.apache.fineract.portfolio.savings.exception.SavingsProductNotFoundException;
 import org.apache.fineract.useradministration.domain.AppUser;
 import org.joda.time.LocalDate;
+import org.joda.time.LocalTime;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -339,6 +340,7 @@ public class 
DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl impl
 
             final Integer repeatsOnDay = calendarStartDate.getDayOfWeek();
             final String title = "recurring_savings_" + account.getId();
+            
             final Calendar calendar = Calendar.createRepeatingCalendar(title, 
calendarStartDate, CalendarType.COLLECTION.getValue(),
                     CalendarFrequencyType.from(periodFrequencyType), 
frequency, repeatsOnDay);
             calendarInstance = CalendarInstance.from(calendar, 
account.getId(), CalendarEntityType.SAVINGS.getValue());

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5178d3a8/fineract-provider/src/main/resources/sql/migrations/core_db/V295__Adding_Meeting_Time_column.sql
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/resources/sql/migrations/core_db/V295__Adding_Meeting_Time_column.sql
 
b/fineract-provider/src/main/resources/sql/migrations/core_db/V295__Adding_Meeting_Time_column.sql
new file mode 100644
index 0000000..9d4b2a7
--- /dev/null
+++ 
b/fineract-provider/src/main/resources/sql/migrations/core_db/V295__Adding_Meeting_Time_column.sql
@@ -0,0 +1 @@
+alter table m_calendar add meeting_time Time 
\ No newline at end of file


Reply via email to