Fineract-955 - Upgrade ical4j from ancient version 1.0.7 to current 3.0.18
This commit is contained in:
committed by
Michael Vorburger ⛑️
parent
16fb971f45
commit
96452f3ff4
@@ -89,7 +89,7 @@ dependencyManagement {
|
||||
dependency 'org.drizzle.jdbc:drizzle-jdbc:1.4'
|
||||
dependency 'com.lowagie:itext:2.1.7'
|
||||
dependency 'com.lowagie:itext-rtf:2.1.7'
|
||||
dependency 'org.mnode.ical4j:ical4j:1.0.7'
|
||||
dependency 'org.mnode.ical4j:ical4j:3.0.18'
|
||||
dependency 'org.flywaydb:flyway-core:6.4.1'
|
||||
dependency 'org.quartz-scheduler:quartz:+'
|
||||
dependency 'com.amazonaws:aws-java-sdk-s3:1.11.779'
|
||||
|
||||
+1
-1
@@ -25,8 +25,8 @@ import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import net.fortuna.ical4j.model.ValidationException;
|
||||
import net.fortuna.ical4j.model.property.RRule;
|
||||
import net.fortuna.ical4j.validate.ValidationException;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.joda.time.LocalDate;
|
||||
import org.quartz.CronExpression;
|
||||
|
||||
+1
-1
@@ -20,8 +20,8 @@ package org.apache.fineract.organisation.workingdays.service;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.util.Map;
|
||||
import net.fortuna.ical4j.model.ValidationException;
|
||||
import net.fortuna.ical4j.model.property.RRule;
|
||||
import net.fortuna.ical4j.validate.ValidationException;
|
||||
import org.apache.fineract.infrastructure.core.api.JsonCommand;
|
||||
import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
|
||||
import org.apache.fineract.infrastructure.core.data.CommandProcessingResultBuilder;
|
||||
|
||||
+79
-43
@@ -32,11 +32,11 @@ import net.fortuna.ical4j.model.DateList;
|
||||
import net.fortuna.ical4j.model.DateTime;
|
||||
import net.fortuna.ical4j.model.NumberList;
|
||||
import net.fortuna.ical4j.model.Recur;
|
||||
import net.fortuna.ical4j.model.ValidationException;
|
||||
import net.fortuna.ical4j.model.WeekDay;
|
||||
import net.fortuna.ical4j.model.WeekDayList;
|
||||
import net.fortuna.ical4j.model.parameter.Value;
|
||||
import net.fortuna.ical4j.model.property.RRule;
|
||||
import net.fortuna.ical4j.validate.ValidationException;
|
||||
import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder;
|
||||
import org.apache.fineract.infrastructure.core.exception.PlatformDataIntegrityException;
|
||||
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
|
||||
@@ -242,13 +242,13 @@ public class CalendarUtils {
|
||||
|
||||
if (recur == null) { return humanReadable; }
|
||||
|
||||
if (recur.getFrequency().equals(Recur.DAILY)) {
|
||||
if (recur.getFrequency().equals(Recur.Frequency.DAILY)) {
|
||||
if (recur.getInterval() == 1) {
|
||||
humanReadable = "Daily";
|
||||
} else {
|
||||
humanReadable = "Every " + recur.getInterval() + " days";
|
||||
}
|
||||
} else if (recur.getFrequency().equals(Recur.WEEKLY)) {
|
||||
} else if (recur.getFrequency().equals(Recur.Frequency.WEEKLY)) {
|
||||
if (recur.getInterval() == 1 || recur.getInterval() == -1) {
|
||||
humanReadable = "Weekly";
|
||||
} else {
|
||||
@@ -261,26 +261,26 @@ public class CalendarUtils {
|
||||
for (@SuppressWarnings("rawtypes")
|
||||
final Iterator iterator = weekDayList.iterator(); iterator.hasNext();) {
|
||||
final WeekDay weekDay = (WeekDay) iterator.next();
|
||||
humanReadable += DayNameEnum.from(weekDay.getDay()).getCode();
|
||||
humanReadable += DayNameEnum.from(weekDay.getDay().name()).getCode();
|
||||
}
|
||||
|
||||
} else if (recur.getFrequency().equals(Recur.MONTHLY)) {
|
||||
} else if (recur.getFrequency().equals(Recur.Frequency.MONTHLY)) {
|
||||
NumberList nthDays = recur.getSetPosList();
|
||||
Integer nthDay = null;
|
||||
if (!nthDays.isEmpty())
|
||||
nthDay = (Integer) nthDays.get(0);
|
||||
nthDay = nthDays.get(0);
|
||||
NumberList monthDays = recur.getMonthDayList();
|
||||
Integer monthDay = null;
|
||||
if (!monthDays.isEmpty())
|
||||
monthDay = (Integer) monthDays.get(0);
|
||||
monthDay = monthDays.get(0);
|
||||
WeekDayList weekdays = recur.getDayList();
|
||||
WeekDay weekDay = null;
|
||||
if (!weekdays.isEmpty())
|
||||
weekDay = (WeekDay) weekdays.get(0);
|
||||
weekDay = weekdays.get(0);
|
||||
if (nthDay != null && weekDay != null) {
|
||||
NthDayType nthDayType = NthDayType.fromInt(nthDay);
|
||||
NthDayNameEnum nthDayName = NthDayNameEnum.from(nthDayType.toString());
|
||||
DayNameEnum weekdayType = DayNameEnum.from(weekDay.getDay());
|
||||
DayNameEnum weekdayType = DayNameEnum.from(weekDay.getDay().name());
|
||||
if (recur.getInterval() == 1 || recur.getInterval() == -1) {
|
||||
humanReadable = "Monthly on " + nthDayName.getCode().toLowerCase() + " " + weekdayType.getCode().toLowerCase();
|
||||
} else {
|
||||
@@ -308,7 +308,7 @@ public class CalendarUtils {
|
||||
humanReadable = "Every " + recur.getInterval() + " months on day " + startDate.getDayOfMonth();
|
||||
}
|
||||
}
|
||||
} else if (recur.getFrequency().equals(Recur.YEARLY)) {
|
||||
} else if (recur.getFrequency().equals(Recur.Frequency.YEARLY)) {
|
||||
if (recur.getInterval() == 1) {
|
||||
humanReadable = "Annually on " + startDate.toString("MMM") + " " + startDate.getDayOfMonth();
|
||||
} else {
|
||||
@@ -420,13 +420,13 @@ public class CalendarUtils {
|
||||
|
||||
private static PeriodFrequencyType getMeetingPeriodFrequencyType(final Recur recur) {
|
||||
PeriodFrequencyType meetingFrequencyType = PeriodFrequencyType.INVALID;
|
||||
if (recur.getFrequency().equals(Recur.DAILY)) {
|
||||
if (recur.getFrequency().equals(Recur.Frequency.DAILY)) {
|
||||
meetingFrequencyType = PeriodFrequencyType.DAYS;
|
||||
} else if (recur.getFrequency().equals(Recur.WEEKLY)) {
|
||||
} else if (recur.getFrequency().equals(Recur.Frequency.WEEKLY)) {
|
||||
meetingFrequencyType = PeriodFrequencyType.WEEKS;
|
||||
} else if (recur.getFrequency().equals(Recur.MONTHLY)) {
|
||||
} else if (recur.getFrequency().equals(Recur.Frequency.MONTHLY)) {
|
||||
meetingFrequencyType = PeriodFrequencyType.MONTHS;
|
||||
} else if (recur.getFrequency().equals(Recur.YEARLY)) {
|
||||
} else if (recur.getFrequency().equals(Recur.Frequency.YEARLY)) {
|
||||
meetingFrequencyType = PeriodFrequencyType.YEARS;
|
||||
}
|
||||
return meetingFrequencyType;
|
||||
@@ -435,13 +435,13 @@ public class CalendarUtils {
|
||||
public static String getMeetingFrequencyFromPeriodFrequencyType(final PeriodFrequencyType periodFrequency) {
|
||||
String frequency = null;
|
||||
if (periodFrequency.equals(PeriodFrequencyType.DAYS)) {
|
||||
frequency = Recur.DAILY;
|
||||
frequency = Recur.Frequency.DAILY.name();
|
||||
} else if (periodFrequency.equals(PeriodFrequencyType.WEEKS)) {
|
||||
frequency = Recur.WEEKLY;
|
||||
frequency = Recur.Frequency.WEEKLY.name();
|
||||
} else if (periodFrequency.equals(PeriodFrequencyType.MONTHS)) {
|
||||
frequency = Recur.MONTHLY;
|
||||
frequency = Recur.Frequency.MONTHLY.name();
|
||||
} else if (periodFrequency.equals(PeriodFrequencyType.YEARS)) {
|
||||
frequency = Recur.YEARLY;
|
||||
frequency = Recur.Frequency.YEARLY.name();
|
||||
}
|
||||
return frequency;
|
||||
}
|
||||
@@ -453,7 +453,7 @@ public class CalendarUtils {
|
||||
|
||||
public static CalendarFrequencyType getFrequency(final String recurringRule) {
|
||||
final Recur recur = CalendarUtils.getICalRecur(recurringRule);
|
||||
return CalendarFrequencyType.fromString(recur.getFrequency());
|
||||
return CalendarFrequencyType.fromString(recur.getFrequency().name());
|
||||
}
|
||||
|
||||
public static CalendarWeekDaysType getRepeatsOnDay(final String recurringRule) {
|
||||
@@ -461,8 +461,8 @@ public class CalendarUtils {
|
||||
final WeekDayList weekDays = recur.getDayList();
|
||||
if (weekDays.isEmpty()) return CalendarWeekDaysType.INVALID;
|
||||
// supports only one day
|
||||
WeekDay weekDay = (WeekDay) weekDays.get(0);
|
||||
return CalendarWeekDaysType.fromString(weekDay.getDay());
|
||||
WeekDay weekDay = weekDays.get(0);
|
||||
return CalendarWeekDaysType.fromString(weekDay.getDay().name());
|
||||
}
|
||||
public static NthDayType getRepeatsOnNthDayOfMonth(final String recurringRule) {
|
||||
final Recur recur = CalendarUtils.getICalRecur(recurringRule);
|
||||
@@ -473,7 +473,7 @@ public class CalendarUtils {
|
||||
monthDays = recur.getSetPosList();
|
||||
if (monthDays.isEmpty()) return NthDayType.INVALID;
|
||||
if (!recur.getMonthDayList().isEmpty() && recur.getSetPosList().isEmpty()) return NthDayType.ONDAY;
|
||||
Integer monthDay = (Integer) monthDays.get(0);
|
||||
Integer monthDay = monthDays.get(0);
|
||||
return NthDayType.fromInt(monthDay);
|
||||
}
|
||||
|
||||
@@ -484,7 +484,7 @@ public class CalendarUtils {
|
||||
if (recur == null) { return null; }
|
||||
LocalDate startDate = disbursementDate;
|
||||
final LocalDate seedDate = calendar.getStartDateLocalDate();
|
||||
if (isValidRedurringDate(calendar.getRecurrence(), seedDate, startDate, isSkipRepaymentOnFirstDayOfMonth, numberOfDays) && !frequency.equals(Recur.DAILY)) {
|
||||
if (isValidRedurringDate(calendar.getRecurrence(), seedDate, startDate, isSkipRepaymentOnFirstDayOfMonth, numberOfDays) && !frequency.equals(Recur.Frequency.DAILY.name())) {
|
||||
startDate = startDate.plusDays(1);
|
||||
}
|
||||
// Recurring dates should follow loanRepaymentInterval.
|
||||
@@ -493,7 +493,9 @@ public class CalendarUtils {
|
||||
// where as for loan product with fortnightly frequency interval is 2
|
||||
// to generate currect set of meeting dates reset interval same as loan
|
||||
// repayment interval.
|
||||
recur.setInterval(loanRepaymentInterval);
|
||||
|
||||
Recur.Builder recurBuilder = getRecurBuilder(recur);
|
||||
recurBuilder = recurBuilder.interval(loanRepaymentInterval);
|
||||
|
||||
// Recurring dates should follow loanRepayment frequency.
|
||||
// e.g.
|
||||
@@ -501,11 +503,13 @@ public class CalendarUtils {
|
||||
// frequency type.
|
||||
// to generate currect set of meeting dates reset frequency same as loan
|
||||
// repayment frequency.
|
||||
if (recur.getFrequency().equals(Recur.DAILY)) {
|
||||
recur.setFrequency(frequency);
|
||||
|
||||
if (recur.getFrequency().equals(Recur.Frequency.DAILY)) {
|
||||
recurBuilder = recurBuilder.frequency(Recur.Frequency.valueOf(frequency));
|
||||
}
|
||||
|
||||
final LocalDate firstRepaymentDate = getNextRecurringDate(recur, seedDate, startDate);
|
||||
Recur modifiedRecur = recurBuilder.build();
|
||||
final LocalDate firstRepaymentDate = getNextRecurringDate(modifiedRecur, seedDate, startDate);
|
||||
if (isSkipRepaymentOnFirstDayOfMonth && firstRepaymentDate.getDayOfMonth() == 1) { return adjustRecurringDate(firstRepaymentDate,
|
||||
numberOfDays); }
|
||||
|
||||
@@ -518,10 +522,10 @@ public class CalendarUtils {
|
||||
final Recur recur = CalendarUtils.getICalRecur(recurringRule);
|
||||
if (recur == null) { return null; }
|
||||
if (isValidRecurringDate(recur, seedDate, oldRepaymentDate, isSkipRepaymentOnFirstDayOfMonth, numberOfDays)) { return oldRepaymentDate; }
|
||||
LocalDate nextRapaymentDate = getNextRepaymentMeetingDate(recurringRule, seedDate, oldRepaymentDate, loanRepaymentInterval,
|
||||
LocalDate nextRepaymentDate = getNextRepaymentMeetingDate(recurringRule, seedDate, oldRepaymentDate, loanRepaymentInterval,
|
||||
frequency, workingDays, isSkipRepaymentOnFirstDayOfMonth, numberOfDays);
|
||||
|
||||
return nextRapaymentDate;
|
||||
return nextRepaymentDate;
|
||||
}
|
||||
|
||||
public static LocalDate getNextRepaymentMeetingDate(final String recurringRule, final LocalDate seedDate,
|
||||
@@ -541,7 +545,11 @@ public class CalendarUtils {
|
||||
* with fortnightly frequency will have interval of 2, to generate right
|
||||
* set of meeting dates reset interval same as loan repayment interval.
|
||||
*/
|
||||
recur.setInterval(loanRepaymentInterval);
|
||||
|
||||
Recur.Builder recurBuilder = getRecurBuilder(recur);
|
||||
|
||||
recurBuilder = recurBuilder.interval(loanRepaymentInterval);
|
||||
|
||||
|
||||
/*
|
||||
* Recurring dates should follow loanRepayment frequency. //e.g. daily
|
||||
@@ -549,12 +557,16 @@ public class CalendarUtils {
|
||||
* frequency. to generate right set of meeting dates reset frequency
|
||||
* same as loan repayment frequency.
|
||||
*/
|
||||
if (recur.getFrequency().equals(Recur.DAILY)) {
|
||||
recur.setFrequency(frequency);
|
||||
|
||||
|
||||
if (recur.getFrequency().equals(Recur.Frequency.DAILY)) {
|
||||
recurBuilder = recurBuilder.frequency(Recur.Frequency.valueOf(frequency));
|
||||
}
|
||||
|
||||
LocalDate newRepaymentDate = getNextRecurringDate(recur, seedDate, tmpDate);
|
||||
final LocalDate nextRepaymentDate = getNextRecurringDate(recur, seedDate, newRepaymentDate);
|
||||
Recur modifiedRecur = recurBuilder.build();
|
||||
|
||||
LocalDate newRepaymentDate = getNextRecurringDate(modifiedRecur, seedDate, tmpDate);
|
||||
final LocalDate nextRepaymentDate = getNextRecurringDate(modifiedRecur, seedDate, newRepaymentDate);
|
||||
|
||||
newRepaymentDate = WorkingDaysUtil.getOffSetDateIfNonWorkingDay(newRepaymentDate, nextRepaymentDate, workingDays);
|
||||
if (isSkipRepaymentOnFirstDayOfMonth) {
|
||||
@@ -639,13 +651,13 @@ public class CalendarUtils {
|
||||
|
||||
if (isValidRecurringDate(recur, seedDate, currentDate, isSkipMeetingOnFirstDay, numberOfDays)) { return currentDate; }
|
||||
|
||||
if (recur.getFrequency().equals(Recur.DAILY)) {
|
||||
if (recur.getFrequency().equals(Recur.Frequency.DAILY)) {
|
||||
currentDate = currentDate.plusDays(recur.getInterval());
|
||||
} else if (recur.getFrequency().equals(Recur.WEEKLY)) {
|
||||
} else if (recur.getFrequency().equals(Recur.Frequency.WEEKLY)) {
|
||||
currentDate = currentDate.plusWeeks(recur.getInterval());
|
||||
} else if (recur.getFrequency().equals(Recur.MONTHLY)) {
|
||||
} else if (recur.getFrequency().equals(Recur.Frequency.MONTHLY)) {
|
||||
currentDate = currentDate.plusMonths(recur.getInterval());
|
||||
} else if (recur.getFrequency().equals(Recur.YEARLY)) {
|
||||
} else if (recur.getFrequency().equals(Recur.Frequency.YEARLY)) {
|
||||
currentDate = currentDate.plusYears(recur.getInterval());
|
||||
}
|
||||
|
||||
@@ -694,7 +706,7 @@ public class CalendarUtils {
|
||||
if (getMeetingPeriodFrequencyType(recur).isMonthly()) {
|
||||
monthDayList = recur.getMonthDayList();
|
||||
if (!monthDayList.isEmpty()) {
|
||||
monthOnDay = (Integer) monthDayList.get(0);
|
||||
monthOnDay = monthDayList.get(0);
|
||||
}
|
||||
}
|
||||
return monthOnDay;
|
||||
@@ -746,17 +758,22 @@ public class CalendarUtils {
|
||||
* frequency. to generate right set of meeting dates reset frequency
|
||||
* same as loan repayment frequency.
|
||||
*/
|
||||
if (recur.getFrequency().equals(Recur.DAILY)) {
|
||||
recur.setFrequency(frequency);
|
||||
|
||||
Recur.Builder recurBuilder = getRecurBuilder(recur);
|
||||
|
||||
if (recur.getFrequency().equals(Recur.Frequency.DAILY)) {
|
||||
recurBuilder = recurBuilder.frequency(Recur.Frequency.valueOf(frequency));
|
||||
}
|
||||
|
||||
Recur modifiedRecur = recurBuilder.build();
|
||||
|
||||
/**
|
||||
* Below code modified as discussed with Pramod N
|
||||
*/
|
||||
LocalDate newRepaymentDate = tmpDate;
|
||||
int newRepayment = rep;
|
||||
while (newRepayment > 0) {
|
||||
newRepaymentDate = getNextRecurringDate(recur, seedDate, newRepaymentDate);
|
||||
newRepaymentDate = getNextRecurringDate(modifiedRecur, seedDate, newRepaymentDate);
|
||||
newRepayment--;
|
||||
}
|
||||
|
||||
@@ -802,9 +819,28 @@ public class CalendarUtils {
|
||||
* monthly and meeting frequency is weekly, then generate repayments
|
||||
* schedule as every 4 weeks
|
||||
*/
|
||||
if (frequency.equals(Recur.MONTHLY) && recur.getFrequency().equals(Recur.WEEKLY)) {
|
||||
if (frequency.equals(Recur.Frequency.MONTHLY.name()) && recur.getFrequency().equals(Recur.Frequency.WEEKLY)) {
|
||||
repaymentInterval = loanRepaymentInterval*interval;
|
||||
}
|
||||
return repaymentInterval;
|
||||
}
|
||||
|
||||
private static Recur.Builder getRecurBuilder(Recur recur) {
|
||||
Recur.Builder recurBuilder = new Recur.Builder();
|
||||
recurBuilder = recurBuilder.frequency(recur.getFrequency())
|
||||
.until(recur.getUntil())
|
||||
.count(recur.getCount())
|
||||
.interval(recur.getInterval())
|
||||
.secondList(recur.getSecondList())
|
||||
.minuteList(recur.getMinuteList())
|
||||
.hourList(recur.getHourList())
|
||||
.dayList(recur.getDayList())
|
||||
.monthDayList(recur.getMonthDayList())
|
||||
.yearDayList(recur.getYearDayList())
|
||||
.weekNoList(recur.getWeekNoList())
|
||||
.monthList(recur.getMonthList())
|
||||
.setPosList(recur.getSetPosList())
|
||||
.weekStartDay(recur.getWeekStartDay());
|
||||
return recurBuilder;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user