package org.openlmis.core.model.service;
import com.google.inject.Inject;
import org.joda.time.DateTime;
import org.openlmis.core.LMISApp;
import org.openlmis.core.exceptions.LMISException;
import org.openlmis.core.model.Period;
import org.openlmis.core.model.StockMovementItem;
import org.openlmis.core.model.repository.StockMovementRepository;
import org.openlmis.core.model.repository.StockRepository;
public class ProgramDataFormPeriodService {
@Inject
StockRepository stockRepository;
@Inject
private StockMovementRepository stockMovementRepository;
public Period getFirstStandardPeriod() throws LMISException {
StockMovementItem firstStockMovement = stockMovementRepository.getFirstStockMovement();
if (firstStockMovement != null) {
Period firstPeriod = firstStockMovement.getMovementPeriod();
if (firstPeriod != null && todayEligibleForNewPeriod(firstPeriod)) {
return firstPeriod;
} else {
return null;
}
} else {
return null;
}
}
private boolean todayEligibleForNewPeriod(Period period) {
DateTime periodBeginEligibleDate = period.getEnd().minusDays(Period.END_DAY - Period.INVENTORY_BEGIN_DAY);
DateTime today = new DateTime(LMISApp.getInstance().getCurrentTimeMillis());
return periodBeginEligibleDate.isBefore(today) || periodBeginEligibleDate.equals(today);
}
public Period generateNextPeriod(Period period) {
Period nextPeriod = period.next();
if (todayEligibleForNewPeriod(nextPeriod)) {
return nextPeriod;
} else {
return null;
}
}
}