use of org.hisp.dhis.dataelement.DataElement in project dhis2-core by dhis2.
the class ActivityReportingServiceImpl method saveActivityReport.
// -------------------------------------------------------------------------
// DataValueService
// -------------------------------------------------------------------------
@Override
public void saveActivityReport(OrganisationUnit unit, ActivityValue activityValue, Integer programStageSectionId) throws NotAllowedException {
ProgramStageInstance programStageInstance = programStageInstanceService.getProgramStageInstance(activityValue.getProgramInstanceId());
if (programStageInstance == null) {
throw NotAllowedException.INVALID_PROGRAM_STAGE;
}
programStageInstance.getProgramStage();
List<org.hisp.dhis.dataelement.DataElement> dataElements = new ArrayList<>();
ProgramStageSection programStageSection = programStageSectionService.getProgramStageSection(programStageSectionId);
if (programStageSectionId != 0) {
dataElements.addAll(programStageSection.getDataElements());
} else {
for (ProgramStageDataElement de : programStageInstance.getProgramStage().getProgramStageDataElements()) {
dataElements.add(de.getDataElement());
}
}
programStageInstance.getProgramStage().getProgramStageDataElements();
Collection<Integer> dataElementIds = new ArrayList<>(activityValue.getDataValues().size());
for (DataValue dv : activityValue.getDataValues()) {
dataElementIds.add(dv.getId());
}
if (dataElements.size() != dataElementIds.size()) {
throw NotAllowedException.INVALID_PROGRAM_STAGE;
}
Map<Integer, org.hisp.dhis.dataelement.DataElement> dataElementMap = new HashMap<>();
for (org.hisp.dhis.dataelement.DataElement dataElement : dataElements) {
if (!dataElementIds.contains(dataElement.getId())) {
throw NotAllowedException.INVALID_PROGRAM_STAGE;
}
dataElementMap.put(dataElement.getId(), dataElement);
}
// Set ProgramStageInstance to completed
if (programStageSectionId == 0) {
programStageInstance.setStatus(EventStatus.COMPLETED);
programStageInstanceService.updateProgramStageInstance(programStageInstance);
}
// Everything is fine, hence save
saveDataValues(activityValue, programStageInstance, dataElementMap);
}
use of org.hisp.dhis.dataelement.DataElement in project dhis2-core by dhis2.
the class SaveSectionFormAction method execute.
// -------------------------------------------------------------------------
// Action Implementation
// -------------------------------------------------------------------------
@Override
public String execute() {
Validate.notNull(organisationUnitId);
Validate.notNull(isoPeriod);
Validate.notNull(dataSetId);
OrganisationUnit organisationUnit = organisationUnitService.getOrganisationUnit(organisationUnitId);
Period period = periodService.getPeriod(isoPeriod);
boolean needsValidation = false;
dataSet = dataSetService.getDataSet(dataSetId);
String storedBy = currentUserService.getCurrentUsername();
if (StringUtils.isBlank(storedBy)) {
storedBy = "[unknown]";
}
HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST);
Map<String, String> parameterMap = ContextUtils.getParameterMap(request);
for (String key : parameterMap.keySet()) {
if (key.startsWith("DE") && key.contains("OC")) {
String[] splitKey = key.split("OC");
Integer dataElementId = Integer.parseInt(splitKey[0].substring(2));
Integer optionComboId = Integer.parseInt(splitKey[1]);
String value = parameterMap.get(key);
DataElement dataElement = dataElementService.getDataElement(dataElementId);
DataElementCategoryOptionCombo categoryOptionCombo = categoryService.getDataElementCategoryOptionCombo(optionComboId);
DataValue dataValue = dataValueService.getDataValue(dataElement, period, organisationUnit, categoryOptionCombo);
value = value.trim();
Boolean valueIsEmpty = value.length() == 0;
// validate types
Boolean correctType = true;
ValueType valueType = dataElement.getValueType();
if (!valueIsEmpty) {
if (valueType.isText()) {
} else if (ValueType.BOOLEAN == valueType) {
if (!ValueUtils.isBoolean(value)) {
correctType = false;
typeViolations.put(key, "\"" + value + "\"" + " " + i18n.getString("is_invalid_boolean"));
}
} else if (ValueType.DATE == valueType) {
if (!ValueUtils.isDate(value)) {
correctType = false;
typeViolations.put(key, "\"" + value + "\"" + " " + i18n.getString("is_invalid_date"));
}
} else if (ValueType.NUMBER == valueType) {
if (!MathUtils.isNumeric(value)) {
correctType = false;
typeViolations.put(key, "\"" + value + "\"" + " " + i18n.getString("is_invalid_number"));
}
} else if (ValueType.INTEGER == valueType) {
if (!MathUtils.isInteger(value)) {
correctType = false;
typeViolations.put(key, "\"" + value + "\"" + " " + i18n.getString("is_invalid_integer"));
}
} else if (ValueType.INTEGER_POSITIVE == valueType) {
if (!MathUtils.isPositiveInteger(value)) {
correctType = false;
typeViolations.put(key, "\"" + value + "\"" + " " + i18n.getString("is_invalid_positive_integer"));
}
} else if (ValueType.INTEGER_NEGATIVE == valueType) {
if (!MathUtils.isNegativeInteger(value)) {
correctType = false;
typeViolations.put(key, "\"" + value + "\"" + " " + i18n.getString("is_invalid_negative_integer"));
}
} else if (ValueType.INTEGER_ZERO_OR_POSITIVE == valueType) {
if (!MathUtils.isZeroOrPositiveInteger(value)) {
correctType = false;
typeViolations.put(key, "\"" + value + "\"" + " " + i18n.getString("is_invalid_zero_or_positive_integer"));
}
} else if (ValueType.COORDINATE == valueType) {
if (!MathUtils.isCoordinate(value)) {
correctType = false;
typeViolations.put(key, "\"" + value + "\"" + " " + i18n.getString("is_invalid_coordinate"));
}
}
}
// nothing entered
if (valueIsEmpty || !correctType) {
if (dataValue != null) {
dataValueService.deleteDataValue(dataValue);
}
}
if (correctType && !valueIsEmpty) {
if (dataValue == null) {
needsValidation = true;
dataValue = new DataValue(dataElement, period, organisationUnit, categoryOptionCombo, null, value, storedBy, new Date(), null);
dataValueService.addDataValue(dataValue);
} else {
if (!dataValue.getValue().equals(value)) {
needsValidation = true;
dataValue.setValue(value);
dataValue.setLastUpdated(new Date());
dataValue.setStoredBy(storedBy);
dataValueService.updateDataValue(dataValue);
}
}
}
}
}
//TODO
DataElementCategoryOptionCombo optionCombo = categoryService.getDefaultDataElementCategoryOptionCombo();
CompleteDataSetRegistration registration = registrationService.getCompleteDataSetRegistration(dataSet, period, organisationUnit, optionCombo);
if (registration == null && complete) {
registration = new CompleteDataSetRegistration();
registration.setDataSet(dataSet);
registration.setPeriod(period);
registration.setSource(organisationUnit);
registration.setDate(new Date());
registration.setStoredBy(storedBy);
registrationService.saveCompleteDataSetRegistration(registration);
} else if (registration != null && !complete) {
registrationService.deleteCompleteDataSetRegistration(registration);
}
if (typeViolations.size() > 0) {
needsValidation = true;
}
if (sectionId != null) {
for (Section section : dataSet.getSections()) {
if (section.getId() == sectionId) {
name = section.getName();
dataElements = section.getDataElements();
break;
}
}
} else {
name = "Default";
dataElements = new ArrayList<>(dataSet.getDataElements());
Collections.sort(dataElements);
}
dataValues = formUtils.getDataValueMap(organisationUnit, dataSet, period);
validationViolations = formUtils.getValidationViolations(organisationUnit, dataElements, period);
if (needsValidation && (!validationViolations.isEmpty() || !typeViolations.isEmpty())) {
return ERROR;
}
validated = true;
return SUCCESS;
}
use of org.hisp.dhis.dataelement.DataElement in project dhis2-core by dhis2.
the class SaveMinMaxLimitsAction method execute.
// -------------------------------------------------------------------------
// Action implementation
// -------------------------------------------------------------------------
@Override
public String execute() throws Exception {
minLimit = minLimit != null ? minLimit : 0;
maxLimit = maxLimit != null ? maxLimit : 0;
OrganisationUnit organisationUnit = organisationUnitService.getOrganisationUnit(organisationUnitId);
DataElement dataElement = dataElementService.getDataElement(dataElementId);
DataElementCategoryOptionCombo optionCombo = categoryService.getDataElementCategoryOptionCombo(categoryOptionComboId);
MinMaxDataElement minMaxDataElement = minMaxDataElementService.getMinMaxDataElement(organisationUnit, dataElement, optionCombo);
if (minMaxDataElement == null) {
minMaxDataElement = new MinMaxDataElement(organisationUnit, dataElement, optionCombo, minLimit, maxLimit, false);
minMaxDataElementService.addMinMaxDataElement(minMaxDataElement);
} else {
minMaxDataElement.setMin(minLimit);
minMaxDataElement.setMax(maxLimit);
minMaxDataElement.setGenerated(false);
minMaxDataElementService.updateMinMaxDataElement(minMaxDataElement);
}
return SUCCESS;
}
use of org.hisp.dhis.dataelement.DataElement in project dhis2-core by dhis2.
the class ObjectUtilsTest method testJoin.
@Test
public void testJoin() {
DataElement deA = new DataElement("DataElementA");
DataElement deB = new DataElement("DataElementB");
DataElement deC = new DataElement("DataElementC");
List<DataElement> elements = Lists.newArrayList(deA, deB, deC);
String actual = ObjectUtils.join(elements, ", ", de -> de.getName());
assertEquals("DataElementA, DataElementB, DataElementC", actual);
assertEquals(null, ObjectUtils.join(null, ", ", null));
}
use of org.hisp.dhis.dataelement.DataElement in project dhis2-core by dhis2.
the class DefaultDataIntegrityService method getDataElementsAssignedToDataSetsWithDifferentPeriodTypes.
@Override
public SortedMap<DataElement, Collection<DataSet>> getDataElementsAssignedToDataSetsWithDifferentPeriodTypes() {
Collection<DataElement> dataElements = dataElementService.getAllDataElements();
Collection<DataSet> dataSets = dataSetService.getAllDataSets();
SortedMap<DataElement, Collection<DataSet>> targets = new TreeMap<>();
for (DataElement element : dataElements) {
final Set<PeriodType> targetPeriodTypes = new HashSet<>();
final Collection<DataSet> targetDataSets = new HashSet<>();
for (DataSet dataSet : dataSets) {
if (dataSet.getDataElements().contains(element)) {
targetPeriodTypes.add(dataSet.getPeriodType());
targetDataSets.add(dataSet);
}
}
if (targetPeriodTypes.size() > 1) {
targets.put(element, targetDataSets);
}
}
return targets;
}
Aggregations