use of org.hisp.dhis.tracker.domain.DataValue in project dhis2-core by dhis2.
the class AssignValueImplementerTest method testAssignDataElementValueForEventsWhenDataElementIsAlreadyPresent.
@Test
void testAssignDataElementValueForEventsWhenDataElementIsAlreadyPresent() {
List<Event> events = Lists.newArrayList(getEventWithDataValueSet());
bundle.setEvents(events);
bundle.setRuleEffects(getRuleEventEffects(events));
Map<String, List<ProgramRuleIssue>> eventIssues = implementerToTest.validateEvents(bundle);
Event event = bundle.getEvents().stream().filter(e -> e.getEvent().equals(FIRST_EVENT_ID)).findAny().get();
Optional<DataValue> newDataValue = event.getDataValues().stream().filter(dv -> dv.getDataElement().equals(dataElementA.getUid())).findAny();
assertTrue(newDataValue.isPresent());
assertEquals(DATA_ELEMENT_OLD_VALUE, newDataValue.get().getValue());
assertEquals(1, eventIssues.size());
assertEquals(1, eventIssues.get(FIRST_EVENT_ID).size());
assertEquals(ERROR, eventIssues.get(FIRST_EVENT_ID).get(0).getIssueType());
}
use of org.hisp.dhis.tracker.domain.DataValue in project dhis2-core by dhis2.
the class AssignValueImplementerTest method testAssignDataElementValueForEventsWhenDataElementIsEmpty.
@Test
void testAssignDataElementValueForEventsWhenDataElementIsEmpty() {
List<Event> events = Lists.newArrayList(getEventWithDataValueNOTSet());
bundle.setEvents(events);
bundle.setRuleEffects(getRuleEventEffects(events));
Map<String, List<ProgramRuleIssue>> eventIssues = implementerToTest.validateEvents(bundle);
Event event = bundle.getEvents().stream().filter(e -> e.getEvent().equals(SECOND_EVENT_ID)).findAny().get();
Optional<DataValue> newDataValue = event.getDataValues().stream().filter(dv -> dv.getDataElement().equals(dataElementA.getUid())).findAny();
assertTrue(newDataValue.isPresent());
assertEquals(DATA_ELEMENT_NEW_VALUE, newDataValue.get().getValue());
assertEquals(1, eventIssues.size());
assertEquals(1, eventIssues.get(SECOND_EVENT_ID).size());
assertEquals(WARNING, eventIssues.get(SECOND_EVENT_ID).get(0).getIssueType());
}
use of org.hisp.dhis.tracker.domain.DataValue in project dhis2-core by dhis2.
the class EventTrackerConverterService method from.
private ProgramStageInstance from(TrackerPreheat preheat, Event event, ProgramStageInstance programStageInstance) {
ProgramStage programStage = preheat.get(ProgramStage.class, event.getProgramStage());
Program program = preheat.get(Program.class, event.getProgram());
OrganisationUnit organisationUnit = preheat.get(OrganisationUnit.class, event.getOrgUnit());
Date now = new Date();
if (isNewEntity(programStageInstance)) {
programStageInstance = new ProgramStageInstance();
programStageInstance.setUid(!StringUtils.isEmpty(event.getEvent()) ? event.getEvent() : event.getUid());
programStageInstance.setCreated(now);
programStageInstance.setStoredBy(event.getStoredBy());
programStageInstance.setCreatedByUserInfo(UserInfoSnapshot.from(preheat.getUser()));
}
programStageInstance.setLastUpdatedByUserInfo(UserInfoSnapshot.from(preheat.getUser()));
programStageInstance.setLastUpdated(now);
programStageInstance.setDeleted(false);
programStageInstance.setCreatedAtClient(DateUtils.fromInstant(event.getCreatedAtClient()));
programStageInstance.setLastUpdatedAtClient(DateUtils.fromInstant(event.getUpdatedAtClient()));
programStageInstance.setProgramInstance(getProgramInstance(preheat, TrackerIdScheme.UID, event.getEnrollment(), program));
programStageInstance.setProgramStage(programStage);
programStageInstance.setOrganisationUnit(organisationUnit);
programStageInstance.setExecutionDate(DateUtils.fromInstant(event.getOccurredAt()));
programStageInstance.setDueDate(DateUtils.fromInstant(event.getScheduledAt()));
String attributeOptionCombo = event.getAttributeOptionCombo();
if (attributeOptionCombo != null) {
programStageInstance.setAttributeOptionCombo(preheat.get(CategoryOptionCombo.class, event.getAttributeOptionCombo()));
} else {
programStageInstance.setAttributeOptionCombo((CategoryOptionCombo) preheat.getDefaults().get(CategoryOptionCombo.class));
}
programStageInstance.setGeometry(event.getGeometry());
EventStatus previousStatus = programStageInstance.getStatus();
Date completedDate = DateUtils.fromInstant(event.getCompletedAt());
programStageInstance.setStatus(event.getStatus());
if (!Objects.equal(previousStatus, programStageInstance.getStatus()) && programStageInstance.isCompleted()) {
programStageInstance.setCompletedDate(completedDate == null ? new Date() : completedDate);
programStageInstance.setCompletedBy(event.getCompletedBy() != null ? event.getCompletedBy() : preheat.getUsername());
}
if (programStage.isEnableUserAssignment()) {
User assignedUser = preheat.get(User.class, event.getAssignedUser());
programStageInstance.setAssignedUser(assignedUser);
}
if (program.isRegistration() && programStageInstance.getDueDate() == null && programStageInstance.getExecutionDate() != null) {
programStageInstance.setDueDate(programStageInstance.getExecutionDate());
}
for (DataValue dataValue : event.getDataValues()) {
EventDataValue eventDataValue = new EventDataValue();
eventDataValue.setValue(dataValue.getValue());
eventDataValue.setCreated(DateUtils.fromInstant(dataValue.getCreatedAt()));
eventDataValue.setLastUpdated(new Date());
eventDataValue.setProvidedElsewhere(dataValue.isProvidedElsewhere());
// ensure dataElement is referred to by UID as multiple
// dataElementIdSchemes are supported
DataElement dataElement = preheat.get(DataElement.class, dataValue.getDataElement());
eventDataValue.setDataElement(dataElement.getUid());
eventDataValue.setLastUpdatedByUserInfo(UserInfoSnapshot.from(preheat.getUser()));
User createdBy = preheat.getUsers().get(dataValue.getCreatedBy());
eventDataValue.setCreatedByUserInfo(Optional.ofNullable(createdBy).map(u -> UserInfoSnapshot.from(createdBy)).orElseGet(() -> UserInfoSnapshot.from(preheat.getUser())));
programStageInstance.getEventDataValues().add(eventDataValue);
}
if (isNotEmpty(event.getNotes())) {
programStageInstance.getComments().addAll(notesConverterService.from(preheat, event.getNotes()));
}
return programStageInstance;
}
use of org.hisp.dhis.tracker.domain.DataValue in project dhis2-core by dhis2.
the class AssignValueImplementer method createDataValue.
private DataValue createDataValue(String dataElementUid, String newValue) {
DataValue dataValue = new DataValue();
dataValue.setDataElement(dataElementUid);
dataValue.setValue(newValue);
return dataValue;
}
use of org.hisp.dhis.tracker.domain.DataValue in project dhis2-core by dhis2.
the class EventDataValuesValidationHookTest method failsOnActiveEventWithDataElementValueNullAndValidationStrategyOnUpdate.
@Test
void failsOnActiveEventWithDataElementValueNullAndValidationStrategyOnUpdate() {
setUpIdentifiers();
DataElement validDataElement = dataElement();
when(context.getDataElement(dataElementUid)).thenReturn(validDataElement);
ProgramStage programStage = programStage(validDataElement, true);
programStage.setValidationStrategy(ValidationStrategy.ON_UPDATE_AND_INSERT);
when(context.getProgramStage(programStageUid)).thenReturn(programStage);
ValidationErrorReporter reporter = new ValidationErrorReporter(context);
DataValue validDataValue = dataValue();
validDataValue.setValue(null);
Event event = Event.builder().programStage(programStage.getUid()).status(EventStatus.ACTIVE).dataValues(Set.of(validDataValue)).build();
hook.validateEvent(reporter, event);
assertThat(reporter.getReportList(), hasSize(1));
assertEquals(TrackerErrorCode.E1076, reporter.getReportList().get(0).getErrorCode());
}
Aggregations