Refactoring code moving to methods in PersonalTimesheetsPeriodicityEnum
FEA: ItEr77S07PersonalTimesheetsPeriodictyConfiguration
This commit is contained in:
parent
57763f233f
commit
33de9de661
2 changed files with 99 additions and 77 deletions
|
|
@ -21,6 +21,10 @@ package org.libreplan.business.common.entities;
|
|||
|
||||
import static org.libreplan.business.i18n.I18nHelper._;
|
||||
|
||||
import org.joda.time.LocalDate;
|
||||
import org.joda.time.Months;
|
||||
import org.joda.time.Weeks;
|
||||
|
||||
/**
|
||||
* Different values for personal timesheets periodicity.
|
||||
*
|
||||
|
|
@ -28,9 +32,86 @@ import static org.libreplan.business.i18n.I18nHelper._;
|
|||
*/
|
||||
public enum PersonalTimesheetsPeriodicityEnum {
|
||||
|
||||
MONTHLY(_("Monthly")),
|
||||
TWICE_MONTHLY(_("Twice-monthly")),
|
||||
WEEKLY(_("Weekly"));
|
||||
MONTHLY(_("Monthly")) {
|
||||
@Override
|
||||
public LocalDate getStart(LocalDate date) {
|
||||
return date.dayOfMonth().withMinimumValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public LocalDate getEnd(LocalDate date) {
|
||||
return date.dayOfMonth().withMaximumValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemsBetween(LocalDate start, LocalDate end) {
|
||||
return Months.monthsBetween(start, end).getMonths();
|
||||
}
|
||||
|
||||
@Override
|
||||
public LocalDate getDateForItemFromDate(int item, LocalDate fromDate) {
|
||||
return fromDate.plusMonths(item);
|
||||
}
|
||||
},
|
||||
TWICE_MONTHLY(_("Twice-monthly")) {
|
||||
@Override
|
||||
public LocalDate getStart(LocalDate date) {
|
||||
if (date.getDayOfMonth() <= 15) {
|
||||
return date.dayOfMonth().withMinimumValue();
|
||||
} else {
|
||||
return date.dayOfMonth().withMinimumValue().plusDays(15);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public LocalDate getEnd(LocalDate date) {
|
||||
if (date.getDayOfMonth() <= 15) {
|
||||
return date.dayOfMonth().withMinimumValue().plusDays(14);
|
||||
} else {
|
||||
return date.dayOfMonth().withMaximumValue();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemsBetween(LocalDate start, LocalDate end) {
|
||||
return Months.monthsBetween(start, end).getMonths() * 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LocalDate getDateForItemFromDate(int item, LocalDate fromDate) {
|
||||
int months = (item % 2 == 0) ? (item / 2) : ((item - 1) / 2);
|
||||
LocalDate date = fromDate.plusMonths(months);
|
||||
if (item % 2 != 0) {
|
||||
if (date.getDayOfMonth() <= 15) {
|
||||
date = date.dayOfMonth().withMinimumValue().plusDays(15);
|
||||
} else {
|
||||
date = date.plusMonths(1).dayOfMonth().withMinimumValue();
|
||||
}
|
||||
}
|
||||
return date;
|
||||
}
|
||||
},
|
||||
WEEKLY(_("Weekly")) {
|
||||
@Override
|
||||
public LocalDate getStart(LocalDate date) {
|
||||
return date.dayOfWeek().withMinimumValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public LocalDate getEnd(LocalDate date) {
|
||||
return date.dayOfWeek().withMaximumValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemsBetween(LocalDate start, LocalDate end) {
|
||||
return Weeks.weeksBetween(start, end).getWeeks();
|
||||
}
|
||||
|
||||
@Override
|
||||
public LocalDate getDateForItemFromDate(int item, LocalDate fromDate) {
|
||||
return fromDate.plusWeeks(item);
|
||||
}
|
||||
};
|
||||
|
||||
private String name;
|
||||
|
||||
|
|
@ -42,4 +123,13 @@ public enum PersonalTimesheetsPeriodicityEnum {
|
|||
return name;
|
||||
}
|
||||
|
||||
public abstract LocalDate getStart(LocalDate date);
|
||||
|
||||
public abstract LocalDate getEnd(LocalDate date);
|
||||
|
||||
public abstract int getItemsBetween(LocalDate start, LocalDate end);
|
||||
|
||||
public abstract LocalDate getDateForItemFromDate(int item,
|
||||
LocalDate fromDate);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,8 +24,6 @@ import java.util.Collections;
|
|||
import java.util.List;
|
||||
|
||||
import org.joda.time.LocalDate;
|
||||
import org.joda.time.Months;
|
||||
import org.joda.time.Weeks;
|
||||
import org.libreplan.business.common.daos.IConfigurationDAO;
|
||||
import org.libreplan.business.common.entities.PersonalTimesheetsPeriodicityEnum;
|
||||
import org.libreplan.business.orders.entities.OrderElement;
|
||||
|
|
@ -81,62 +79,16 @@ public class MonthlyTimesheetsAreaModel implements IMonthlyTimesheetsAreaModel {
|
|||
private List<MonthlyTimesheetDTO> getMonthlyTimesheets(Resource resource,
|
||||
LocalDate start, LocalDate end,
|
||||
PersonalTimesheetsPeriodicityEnum periodicity) {
|
||||
int items;
|
||||
switch (periodicity) {
|
||||
case WEEKLY:
|
||||
start = start.dayOfWeek().withMinimumValue();
|
||||
end = end.dayOfWeek().withMaximumValue();
|
||||
items = Weeks.weeksBetween(start, end).getWeeks();
|
||||
break;
|
||||
case TWICE_MONTHLY:
|
||||
if (start.getDayOfMonth() <= 15) {
|
||||
start = start.dayOfMonth().withMinimumValue();
|
||||
} else {
|
||||
start = start.dayOfMonth().withMinimumValue().plusDays(15);
|
||||
}
|
||||
if (end.getDayOfMonth() <= 15) {
|
||||
end = end.dayOfMonth().withMinimumValue().plusDays(14);
|
||||
} else {
|
||||
end = end.dayOfMonth().withMaximumValue();
|
||||
}
|
||||
items = Months.monthsBetween(start, end).getMonths() * 2;
|
||||
break;
|
||||
case MONTHLY:
|
||||
default:
|
||||
start = start.dayOfMonth().withMinimumValue();
|
||||
end = end.dayOfMonth().withMaximumValue();
|
||||
items = Months.monthsBetween(start, end).getMonths();
|
||||
break;
|
||||
}
|
||||
start = periodicity.getStart(start);
|
||||
end = periodicity.getEnd(end);
|
||||
int items = periodicity.getItemsBetween(start, end);
|
||||
|
||||
List<MonthlyTimesheetDTO> result = new ArrayList<MonthlyTimesheetDTO>();
|
||||
|
||||
// In decreasing order to provide a list sorted with the more recent
|
||||
// monthly timesheets at the beginning
|
||||
for (int i = items; i >= 0; i--) {
|
||||
LocalDate date;
|
||||
switch (periodicity) {
|
||||
case WEEKLY:
|
||||
date = start.plusWeeks(i);
|
||||
break;
|
||||
case TWICE_MONTHLY:
|
||||
int months = (i % 2 == 0) ? (i / 2) : ((i - 1) / 2);
|
||||
date = start.plusMonths(months);
|
||||
if (i % 2 != 0) {
|
||||
if (date.getDayOfMonth() <= 15) {
|
||||
date = date.dayOfMonth().withMinimumValue()
|
||||
.plusDays(15);
|
||||
} else {
|
||||
date = date.plusMonths(1).dayOfMonth()
|
||||
.withMinimumValue();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MONTHLY:
|
||||
default:
|
||||
date = start.plusMonths(i);
|
||||
break;
|
||||
}
|
||||
LocalDate date = periodicity.getDateForItemFromDate(i, start);
|
||||
|
||||
WorkReport workReport = getWorkReport(resource, date);
|
||||
|
||||
|
|
@ -164,28 +116,8 @@ public class MonthlyTimesheetsAreaModel implements IMonthlyTimesheetsAreaModel {
|
|||
|
||||
private EffortDuration getResourceCapcity(Resource resource,
|
||||
LocalDate date, PersonalTimesheetsPeriodicityEnum periodicity) {
|
||||
LocalDate start;
|
||||
LocalDate end;
|
||||
switch (periodicity) {
|
||||
case WEEKLY:
|
||||
start = date.dayOfWeek().withMinimumValue();
|
||||
end = date.dayOfWeek().withMaximumValue();
|
||||
break;
|
||||
case TWICE_MONTHLY:
|
||||
if (date.getDayOfMonth() <= 15) {
|
||||
start = date.dayOfMonth().withMinimumValue();
|
||||
end = start.plusDays(14);
|
||||
} else {
|
||||
start = date.dayOfMonth().withMinimumValue().plusDays(15);
|
||||
end = date.dayOfMonth().withMaximumValue();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
case MONTHLY:
|
||||
start = date.dayOfMonth().withMinimumValue();
|
||||
end = date.dayOfMonth().withMaximumValue();
|
||||
break;
|
||||
}
|
||||
LocalDate start = periodicity.getStart(date);
|
||||
LocalDate end = periodicity.getEnd(date);
|
||||
|
||||
EffortDuration capacity = EffortDuration.zero();
|
||||
for (LocalDate day = start; day.compareTo(end) <= 0; day = day
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue