package module.mission.domain;
import module.finance.util.Money;
import module.organization.domain.Person;
import org.fenixedu.bennu.core.i18n.BundleUtil;
public class AccommodationItem extends AccommodationItem_Base {
public AccommodationItem() {
super();
}
@Override
public String getItemDescription() {
return BundleUtil.getString("resources/MissionResources", "label.accomodationItem.description",
new String[] { getNumberOfNights().toString() });
}
@Override
public Money getPrevisionaryCosts() {
return getValue();
}
@Override
public boolean isConsistent() {
if (getNumberOfNights() == null) {
return false;
}
final int numberOfNights = getNumberOfNights().intValue();
final Mission mission = getMissionVersion().getMission();
final int numberOfMissionNights = mission.calculateNumberOfNights();
return numberOfMissionNights >= numberOfNights && doesNotExceedMaxDailyValue(numberOfNights) && super.isConsistent();
}
private boolean doesNotExceedMaxDailyValue(final int numberOfNights) {
final Money max = getMission().getMaxDailyAccomodationValue();
return max == null || getValue().isLessThanOrEqual(max.multiply(numberOfNights).multiply(getPeopleSet().size()));
}
public static int calculateNumberOfAccomodatedNights(final Mission mission, final Person person) {
int result = 0;
for (final MissionItem missionItem : mission.getMissionItemsSet()) {
if (missionItem instanceof AccommodationItem && missionItem.getPeopleSet().contains(person)) {
final AccommodationItem accommodationItem = (AccommodationItem) missionItem;
final Integer numberOfNights = accommodationItem.getNumberOfNights();
if (numberOfNights != null) {
result += numberOfNights.intValue();
}
}
}
return result;
}
@Override
protected MissionItem createNewVersionInstance(final MissionVersion missionVersion) {
return new AccommodationItem();
}
@Override
protected void setNewVersionInformation(final MissionItem missionItem) {
final AccommodationItem accommodationItem = (AccommodationItem) missionItem;
accommodationItem.setNumberOfNights(getNumberOfNights());
accommodationItem.setValue(getValue());
}
@Deprecated
public boolean hasNumberOfNights() {
return getNumberOfNights() != null;
}
@Deprecated
public boolean hasValue() {
return getValue() != null;
}
}