use of org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.UID in project dhis2-core by dhis2.
the class AbstractEventService method getEvent.
@Transactional(readOnly = true)
@Override
public Event getEvent(ProgramStageInstance programStageInstance, boolean isSynchronizationQuery, boolean skipOwnershipCheck) {
if (programStageInstance == null) {
return null;
}
Event event = new Event();
event.setEvent(programStageInstance.getUid());
if (programStageInstance.getProgramInstance().getEntityInstance() != null) {
event.setTrackedEntityInstance(programStageInstance.getProgramInstance().getEntityInstance().getUid());
}
event.setFollowup(programStageInstance.getProgramInstance().getFollowup());
event.setEnrollmentStatus(EnrollmentStatus.fromProgramStatus(programStageInstance.getProgramInstance().getStatus()));
event.setStatus(programStageInstance.getStatus());
event.setEventDate(DateUtils.getIso8601NoTz(programStageInstance.getExecutionDate()));
event.setDueDate(DateUtils.getIso8601NoTz(programStageInstance.getDueDate()));
event.setStoredBy(programStageInstance.getStoredBy());
event.setCompletedBy(programStageInstance.getCompletedBy());
event.setCompletedDate(DateUtils.getIso8601NoTz(programStageInstance.getCompletedDate()));
event.setCreated(DateUtils.getIso8601NoTz(programStageInstance.getCreated()));
event.setCreatedByUserInfo(programStageInstance.getCreatedByUserInfo());
event.setLastUpdatedByUserInfo(programStageInstance.getLastUpdatedByUserInfo());
event.setCreatedAtClient(DateUtils.getIso8601NoTz(programStageInstance.getCreatedAtClient()));
event.setLastUpdated(DateUtils.getIso8601NoTz(programStageInstance.getLastUpdated()));
event.setLastUpdatedAtClient(DateUtils.getIso8601NoTz(programStageInstance.getLastUpdatedAtClient()));
event.setGeometry(programStageInstance.getGeometry());
event.setDeleted(programStageInstance.isDeleted());
if (programStageInstance.getAssignedUser() != null) {
event.setAssignedUser(programStageInstance.getAssignedUser().getUid());
event.setAssignedUserUsername(programStageInstance.getAssignedUser().getUsername());
event.setAssignedUserDisplayName(programStageInstance.getAssignedUser().getName());
}
User user = currentUserService.getCurrentUser();
OrganisationUnit ou = programStageInstance.getOrganisationUnit();
List<String> errors = trackerAccessManager.canRead(user, programStageInstance, skipOwnershipCheck);
if (!errors.isEmpty()) {
throw new IllegalQueryException(errors.toString());
}
if (ou != null) {
event.setOrgUnit(ou.getUid());
event.setOrgUnitName(ou.getName());
}
Program program = programStageInstance.getProgramInstance().getProgram();
event.setProgram(program.getUid());
event.setEnrollment(programStageInstance.getProgramInstance().getUid());
event.setProgramStage(programStageInstance.getProgramStage().getUid());
CategoryOptionCombo attributeOptionCombo = programStageInstance.getAttributeOptionCombo();
if (attributeOptionCombo != null) {
event.setAttributeOptionCombo(attributeOptionCombo.getUid());
event.setAttributeCategoryOptions(String.join(";", attributeOptionCombo.getCategoryOptions().stream().map(CategoryOption::getUid).collect(Collectors.toList())));
}
if (programStageInstance.getProgramInstance().getEntityInstance() != null) {
event.setTrackedEntityInstance(programStageInstance.getProgramInstance().getEntityInstance().getUid());
}
Collection<EventDataValue> dataValues;
if (!isSynchronizationQuery) {
dataValues = programStageInstance.getEventDataValues();
} else {
Set<String> dataElementsToSync = programStageInstance.getProgramStage().getProgramStageDataElements().stream().filter(psde -> !psde.getSkipSynchronization()).map(psde -> psde.getDataElement().getUid()).collect(Collectors.toSet());
dataValues = programStageInstance.getEventDataValues().stream().filter(dv -> dataElementsToSync.contains(dv.getDataElement())).collect(Collectors.toSet());
}
for (EventDataValue dataValue : dataValues) {
if (getDataElement(user.getUid(), dataValue.getDataElement())) {
DataValue value = new DataValue();
value.setCreated(DateUtils.getIso8601NoTz(dataValue.getCreated()));
value.setCreatedByUserInfo(dataValue.getCreatedByUserInfo());
value.setLastUpdated(DateUtils.getIso8601NoTz(dataValue.getLastUpdated()));
value.setLastUpdatedByUserInfo(dataValue.getLastUpdatedByUserInfo());
value.setDataElement(dataValue.getDataElement());
value.setValue(dataValue.getValue());
value.setProvidedElsewhere(dataValue.getProvidedElsewhere());
value.setStoredBy(dataValue.getStoredBy());
event.getDataValues().add(value);
} else {
log.info("Can not find a Data Element having UID [" + dataValue.getDataElement() + "]");
}
}
event.getNotes().addAll(NoteHelper.convertNotes(programStageInstance.getComments()));
event.setRelationships(programStageInstance.getRelationshipItems().stream().filter(Objects::nonNull).map((r) -> relationshipService.getRelationship(r.getRelationship(), RelationshipParams.FALSE, user)).collect(Collectors.toSet()));
return event;
}
use of org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.UID in project dhis2-core by dhis2.
the class AbstractEventService method deleteEvent.
// -------------------------------------------------------------------------
// DELETE
// -------------------------------------------------------------------------
@Transactional
@Override
public ImportSummary deleteEvent(String uid) {
boolean existsEvent = programStageInstanceService.programStageInstanceExists(uid);
if (existsEvent) {
ProgramStageInstance programStageInstance = programStageInstanceService.getProgramStageInstance(uid);
List<String> errors = trackerAccessManager.canDelete(currentUserService.getCurrentUser(), programStageInstance, false);
if (!errors.isEmpty()) {
return new ImportSummary(ImportStatus.ERROR, errors.toString()).incrementIgnored();
}
programStageInstanceService.deleteProgramStageInstance(programStageInstance);
if (programStageInstance.getProgramStage().getProgram().isRegistration()) {
entityInstanceService.updateTrackedEntityInstance(programStageInstance.getProgramInstance().getEntityInstance());
}
ImportSummary importSummary = new ImportSummary(ImportStatus.SUCCESS, "Deletion of event " + uid + " was successful").incrementDeleted();
importSummary.setReference(uid);
return importSummary;
} else {
return new ImportSummary(ImportStatus.SUCCESS, "Event " + uid + " cannot be deleted as it is not present in the system").incrementIgnored();
}
}
use of org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.UID in project dhis2-core by dhis2.
the class AbstractEnrollmentService method deleteEnrollment.
private ImportSummary deleteEnrollment(String uid, Enrollment enrollment, ImportOptions importOptions) {
ImportSummary importSummary = new ImportSummary();
importOptions = updateImportOptions(importOptions);
boolean existsEnrollment = programInstanceService.programInstanceExists(uid);
if (existsEnrollment) {
ProgramInstance programInstance = programInstanceService.getProgramInstance(uid);
if (enrollment != null) {
importSummary.setReference(uid);
importSummary.setEvents(handleEvents(enrollment, programInstance, importOptions));
}
if (importOptions.getUser() != null) {
isAllowedToDelete(importOptions.getUser(), programInstance, importSummary);
if (importSummary.hasConflicts()) {
importSummary.setStatus(ImportStatus.ERROR);
importSummary.setReference(programInstance.getUid());
importSummary.incrementIgnored();
return importSummary;
}
}
programInstanceService.deleteProgramInstance(programInstance);
teiService.updateTrackedEntityInstance(programInstance.getEntityInstance());
importSummary.setReference(uid);
importSummary.setStatus(ImportStatus.SUCCESS);
importSummary.setDescription("Deletion of enrollment " + uid + " was successful");
return importSummary.incrementDeleted();
} else {
// If I am here, it means that the item is either already deleted or
// it is not present in the system at all.
importSummary.setStatus(ImportStatus.SUCCESS);
importSummary.setDescription("Enrollment " + uid + " cannot be deleted as it is not present in the system");
return importSummary.incrementIgnored();
}
}
use of org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.UID in project dhis2-core by dhis2.
the class NoteSupplier method get.
@Override
public Map<String, Note> get(ImportOptions importOptions, List<Event> events) {
Map<String, Note> persistableNotes = new HashMap<>();
//
// Collects all the notes' UID
//
// @formatter:off
Set<String> notesUid = events.stream().map(Event::getNotes).flatMap(Collection::stream).map(Note::getNote).filter(Objects::nonNull).collect(Collectors.toSet());
if (isNotEmpty(notesUid)) {
final String sql = "select uid from trackedentitycomment where uid in (:ids)";
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("ids", notesUid);
List<String> foundNotes = new ArrayList<>();
//
// finds all the notes that EXIST in the DB (by uid)
//
jdbcTemplate.query(sql, parameters, (ResultSet rs) -> {
while (rs.next()) {
foundNotes.add(rs.getString("uid"));
}
});
for (Event event : events) {
// @formatter:off
List<Note> eventNotes = event.getNotes().stream().filter(u -> !foundNotes.contains(u.getNote())).collect(Collectors.toList());
// @formatter:on
if (isNotEmpty(eventNotes)) {
persistableNotes.putAll(eventNotes.stream().collect(Collectors.toMap(Note::getNote, Function.identity())));
}
}
}
return persistableNotes;
}
use of org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.UID in project dhis2-core by dhis2.
the class OrganisationUnitSupplier method fetchOu.
private Map<String, OrganisationUnit> fetchOu(IdScheme idScheme, Set<String> orgUnitUids, Multimap<String, String> orgUnitToEvent) {
String sql = "select ou.organisationunitid, ou.uid, ou.code, ou.name, ou.path, ou.hierarchylevel ";
if (idScheme.isAttribute()) {
//
// Attribute IdScheme handling: use Postgres JSONB custom clauses to
// query the
// "attributvalues" column
//
// The column is expected to contain a JSON structure like so:
//
// {"ie9wfkGw8GX": {"value": "Some value", "attribute": {"id":
// "ie9wfkGw8GX"}}}
//
// The 'ie9wfkGw8GX' uid is the attribute identifier
//
final String attribute = idScheme.getAttribute();
sql += ",attributevalues->'" + attribute + "'->>'value' as " + ATTRIBUTESCHEME_COL + " from organisationunit ou where ou.attributevalues#>>'{" + attribute + ",value}' in (:ids)";
} else {
sql += "from organisationunit ou where ou." + IdSchemeUtils.getColumnNameByScheme(idScheme, "organisationunitid") + " in (:ids)";
}
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("ids", orgUnitUids);
return jdbcTemplate.query(sql, parameters, rs -> {
Map<String, OrganisationUnit> results = new HashMap<>();
while (rs.next()) {
OrganisationUnit ou = mapFromResultSet(rs);
try {
for (String event : orgUnitToEvent.get(idScheme.isAttribute() ? rs.getString(ATTRIBUTESCHEME_COL) : getIdentifierBasedOnIdScheme(ou, idScheme))) {
results.put(event, ou);
}
} catch (Exception e) {
throw new UnrecoverableImportException(e);
}
}
return results;
});
}
Aggregations