package net.techreadiness.plugin.action.task.dataentry;
import javax.inject.Inject;
import net.techreadiness.annotation.CoreSecured;
import net.techreadiness.plugin.service.AlertBoxService;
import net.techreadiness.security.CorePermissionCodes;
import net.techreadiness.service.OrganizationService;
import net.techreadiness.service.ServiceContext;
import net.techreadiness.service.object.Org;
import net.techreadiness.ui.BaseAction;
import org.apache.commons.lang3.StringUtils;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
@Results({ @Result(name = "success", type = "json", params = { "root", "actionMessages" }) })
public class DataEntryConfirmationAction extends BaseAction {
private static final long serialVersionUID = 1L;
@Inject
AlertBoxService alertBoxService;
@Inject
OrganizationService orgService;
private Long orgId;
Org org;
public static final String COMPLETED = "All the readiness Survey Questions have been answered";
public static final String PARTIAL = "Some Readiness Survey Questions have not been answered";
public static final String NONE = "No readiness Survey Questions have been answered";
public static final String MISSING_READINESS_DETERMINANTS = "Some devices have been entered, but there are missing data for readiness determinant fields";
public static final String NO_DEVICE = "No devices have been entered";
private static final int TOTAL_SURVEY_QUESTION_COUNT = 16;
@CoreSecured({ CorePermissionCodes.READY_CUSTOMER_NETWORK_INFRASTRUCTURE })
@Override
public String execute() {
Long deviceCount = alertBoxService.getDeviceCount(getServiceContext(), orgId);
if (deviceCount == null || deviceCount.longValue() < 1) {
addActionMessage(getText("no.devices.for.organization"));
}
Long devicesMissingFields = alertBoxService.getDeviceCountMissingReadinessDeterminants(getServiceContext(), orgId);
if (devicesMissingFields == null || devicesMissingFields.longValue() > 0) {
addActionMessage(getText("devices.missing.readiness.determinants"));
}
Org org = orgService.getById(getServiceContext(), orgId);
int answeredCount = answeredQuestionsCount(org);
if (answeredCount < TOTAL_SURVEY_QUESTION_COUNT) {
addActionMessage(getText("unanswered.survey.questions"));
}
return SUCCESS;
}
private static int answeredQuestionsCount(Org o) {
int count = (answeredEnrollmentCount(o) == 0 ? 0 : 1) + (StringUtils.isBlank(o.getSchoolType()) ? 0 : 1)
+ (StringUtils.isBlank(o.getInternetSpeed()) ? 0 : 1)
+ (StringUtils.isBlank(o.getInternetUtilization()) ? 0 : 1)
+ (StringUtils.isBlank(o.getNetworkSpeed()) ? 0 : 1)
+ (StringUtils.isBlank(o.getNetworkUtilization()) ? 0 : 1)
+ (StringUtils.isBlank(o.getWirelessAccessPoints()) ? 0 : 1)
+ (StringUtils.isBlank(o.getSimultaneousTesters()) ? 0 : 1)
+ (StringUtils.isBlank(o.getTestingWindowLength()) ? 0 : 1)
+ (StringUtils.isBlank(o.getSessionsPerDay()) ? 0 : 1)
+ (StringUtils.isBlank(o.getSurveyAdminCount()) ? 0 : 1)
+ (StringUtils.isBlank(o.getSurveyAdminUnderstanding()) ? 0 : 1)
+ (StringUtils.isBlank(o.getSurveyAdminTraining()) ? 0 : 1)
+ (StringUtils.isBlank(o.getSurveyTechstaffCount()) ? 0 : 1)
+ (StringUtils.isBlank(o.getSurveyTechstaffUnderstanding()) ? 0 : 1)
+ (StringUtils.isBlank(o.getSurveyTechstaffTraining()) ? 0 : 1);
return count;
}
private static int answeredEnrollmentCount(Org o) {
int count = (StringUtils.isBlank(o.getEnrollmentCountK()) ? 0 : 1)
+ (StringUtils.isBlank(o.getEnrollmentCount1()) ? 0 : 1)
+ (StringUtils.isBlank(o.getEnrollmentCount2()) ? 0 : 1)
+ (StringUtils.isBlank(o.getEnrollmentCount3()) ? 0 : 1)
+ (StringUtils.isBlank(o.getEnrollmentCount4()) ? 0 : 1)
+ (StringUtils.isBlank(o.getEnrollmentCount5()) ? 0 : 1)
+ (StringUtils.isBlank(o.getEnrollmentCount6()) ? 0 : 1)
+ (StringUtils.isBlank(o.getEnrollmentCount7()) ? 0 : 1)
+ (StringUtils.isBlank(o.getEnrollmentCount8()) ? 0 : 1)
+ (StringUtils.isBlank(o.getEnrollmentCount9()) ? 0 : 1)
+ (StringUtils.isBlank(o.getEnrollmentCount10()) ? 0 : 1)
+ (StringUtils.isBlank(o.getEnrollmentCount11()) ? 0 : 1)
+ (StringUtils.isBlank(o.getEnrollmentCount12()) ? 0 : 1);
return count;
}
public AlertBoxService getAlertBoxService() {
return alertBoxService;
}
public void setAlertBoxService(AlertBoxService alertBoxService) {
this.alertBoxService = alertBoxService;
}
public OrganizationService getOrgService() {
return orgService;
}
public void setOrgService(OrganizationService orgService) {
this.orgService = orgService;
}
public Long getOrgId() {
return orgId;
}
public void setOrgId(Long orgId) {
this.orgId = orgId;
}
public String assessSurveyQuestionsAnsweredStatus(ServiceContext context, Long orgId) {
int answeredCount = answeredQuestionsCount(org);
orgId = org.getOrgId();
if (answeredCount == 0) {
return NONE;
}
if (answeredCount < TOTAL_SURVEY_QUESTION_COUNT) {
return PARTIAL;
}
return COMPLETED;
}
}