Search in sources :

Example 11 with DataElement

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);
}
Also used : ProgramStageSection(org.hisp.dhis.program.ProgramStageSection) TrackedEntityDataValue(org.hisp.dhis.trackedentitydatavalue.TrackedEntityDataValue) DataValue(org.hisp.dhis.api.mobile.model.DataValue) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) ProgramStageDataElement(org.hisp.dhis.program.ProgramStageDataElement) DataElement(org.hisp.dhis.dataelement.DataElement) ProgramStageDataElement(org.hisp.dhis.program.ProgramStageDataElement) DataElement(org.hisp.dhis.dataelement.DataElement) ProgramStageInstance(org.hisp.dhis.program.ProgramStageInstance)

Example 12 with DataElement

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;
}
Also used : OrganisationUnit(org.hisp.dhis.organisationunit.OrganisationUnit) DeflatedDataValue(org.hisp.dhis.datavalue.DeflatedDataValue) DataValue(org.hisp.dhis.datavalue.DataValue) ValueType(org.hisp.dhis.common.ValueType) Period(org.hisp.dhis.period.Period) Section(org.hisp.dhis.dataset.Section) Date(java.util.Date) HttpServletRequest(javax.servlet.http.HttpServletRequest) DataElement(org.hisp.dhis.dataelement.DataElement) CompleteDataSetRegistration(org.hisp.dhis.dataset.CompleteDataSetRegistration) DataElementCategoryOptionCombo(org.hisp.dhis.dataelement.DataElementCategoryOptionCombo)

Example 13 with DataElement

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;
}
Also used : OrganisationUnit(org.hisp.dhis.organisationunit.OrganisationUnit) DataElement(org.hisp.dhis.dataelement.DataElement) MinMaxDataElement(org.hisp.dhis.minmax.MinMaxDataElement) MinMaxDataElement(org.hisp.dhis.minmax.MinMaxDataElement) DataElementCategoryOptionCombo(org.hisp.dhis.dataelement.DataElementCategoryOptionCombo)

Example 14 with DataElement

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));
}
Also used : DataElement(org.hisp.dhis.dataelement.DataElement) Test(org.junit.Test)

Example 15 with DataElement

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;
}
Also used : DataElement(org.hisp.dhis.dataelement.DataElement) PeriodType(org.hisp.dhis.period.PeriodType) DataSet(org.hisp.dhis.dataset.DataSet) Collection(java.util.Collection) TreeMap(java.util.TreeMap) HashSet(java.util.HashSet)

Aggregations

DataElement (org.hisp.dhis.dataelement.DataElement)254 Test (org.junit.Test)137 DhisSpringTest (org.hisp.dhis.DhisSpringTest)99 User (org.hisp.dhis.user.User)51 OrganisationUnit (org.hisp.dhis.organisationunit.OrganisationUnit)47 DataElementCategoryOptionCombo (org.hisp.dhis.dataelement.DataElementCategoryOptionCombo)44 DataSet (org.hisp.dhis.dataset.DataSet)39 IdentifiableObject (org.hisp.dhis.common.IdentifiableObject)36 ArrayList (java.util.ArrayList)31 List (java.util.List)31 ClassPathResource (org.springframework.core.io.ClassPathResource)26 HashSet (java.util.HashSet)23 Period (org.hisp.dhis.period.Period)20 ProgramStageDataElement (org.hisp.dhis.program.ProgramStageDataElement)19 DataElementGroup (org.hisp.dhis.dataelement.DataElementGroup)18 DataElementCategoryCombo (org.hisp.dhis.dataelement.DataElementCategoryCombo)16 DataElementOperand (org.hisp.dhis.dataelement.DataElementOperand)15 DataValue (org.hisp.dhis.datavalue.DataValue)15 ObjectBundleValidationReport (org.hisp.dhis.dxf2.metadata.objectbundle.feedback.ObjectBundleValidationReport)14 Matcher (java.util.regex.Matcher)13