package org.openlmis.report.service;
import org.apache.commons.lang.StringUtils;
import org.openlmis.report.model.params.PerformanceByDropoutRateParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class ReportsCommonUtilService {
private ReportsCommonUtilService(){
}
public static final int REGION_REPORT = 1;
public static final int DISTRICT_REPORT = 2;
public static final int FACILLITY_REPORT = 3;
public static final String BELOW_MIN = "1_dropoutGreaterThanHigh";
public static final String MIN = "2_dropOutBetweenMidAndMin";
public static final String AVERAGE = "3_droOputBetweenMidAndHigh";
public static final String HIGHER = "4_dropoutGreaterThanHigh";
public static final String TEMP_MIN = "1_temp_min_less";
public static final String TEMP_GREATER_MIN = "2_temp_min_greater";
public static final String MIN_TEMP_RECORDED = "7_min_temp_recorded";
public static final String MAX_TEMP_RECORDED = "8_max_temp_recorded";
public static final String ALARM_EPISODES_LESS_MIN = "5_alarm_episode_less_min";
public static final String ALARM_EPISODES_GREATER_MIN = "6_alarm_episode_greater_min";
private static final Logger LOGGER = LoggerFactory.getLogger(PerformanceByDropoutRateByDistrictService.class);
public static List<Date> extractColumnValues(PerformanceByDropoutRateParam filterParam) {
String periodStart = filterParam.getPeriod_start_date();
String periodEnd = filterParam.getPeriod_end_date();
Date staDate = null;
Date enDate = null;
List<Date> columnNames = new ArrayList<>();
SimpleDateFormat dateFormatStart = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat dateFormatEnd = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat monthName = new SimpleDateFormat("MMM yyyy");
try {
staDate = dateFormatStart.parse(periodStart);
enDate = dateFormatEnd.parse(periodEnd);
while (!staDate.after(enDate)) {
String colName = monthName.format(staDate);
columnNames.add(monthName.parse(colName));
Calendar calendar = Calendar.getInstance();
calendar.setTime(staDate);
calendar.add(Calendar.MONTH, 1);
staDate = calendar.getTime();
}
} catch (ParseException e) {
LOGGER.warn("error while parsing: ", e);
}
return columnNames;
}
public static PerformanceByDropoutRateParam prepareParam(Map<String, String[]> filterCriteria) {
PerformanceByDropoutRateParam filterParam = null;
if (filterCriteria != null) {
filterParam = new PerformanceByDropoutRateParam();
filterParam.setFacility_id(filterCriteria.get("facility") == null || filterCriteria.get("facility").length <= 0 || StringUtils.isBlank(filterCriteria.get("facility")[0]) ? 0 : Long.parseLong(filterCriteria.get("facility")[0])); //defaults to 0
filterParam.setGeographic_zone_id(filterCriteria.get("geographicZoneId") == null || StringUtils.isBlank(filterCriteria.get("geographicZoneId")[0]) ? 0 : Long.parseLong(filterCriteria.get("geographicZoneId")[0]));
filterParam.setPeriod_end_date(StringUtils.isBlank(filterCriteria.get("periodEnd")[0]) ? null : filterCriteria.get("periodEnd")[0]);
filterParam.setPeriod_start_date(StringUtils.isBlank(filterCriteria.get("periodStart")[0]) ? null : filterCriteria.get("periodStart")[0]);
filterParam.setProduct_id(filterCriteria.get("productId") == null || StringUtils.isBlank(filterCriteria.get("productId")[0]) ? 0 : Long.parseLong(filterCriteria.get("productId")[0]));
}
return filterParam;
}
}