use of org.hisp.dhis.dxf2.importsummary.ImportStatus.ERROR in project dhis2-core by dhis2.
the class EventManager method resolveImportableEvents.
/**
* Filters out Events which are already present in the database (regardless
* of the 'deleted' state) as well as duplicates within the payload (if
* stage is not repeatable)
*
* @param events Events to import
* @param importSummaries ImportSummaries used for import
* @return Events that is possible to import (pass validation)
*/
private List<Event> resolveImportableEvents(final List<Event> events, final ImportSummaries importSummaries, final WorkContext workContext) {
List<Event> importableEvents = new ArrayList<>();
Set<String> importableStageEvents = new HashSet<>();
final Set<String> existingProgramStageInstances = workContext.getProgramStageInstanceMap().keySet();
for (Event eventToImport : events) {
if (existingProgramStageInstances.contains(eventToImport.getUid())) {
final ImportSummary is = new ImportSummary(ERROR, "Event " + eventToImport.getUid() + " already exists or was deleted earlier").setReference(eventToImport.getUid()).incrementIgnored();
importSummaries.addImportSummary(is);
continue;
}
Program program = workContext.getProgramsMap().get(eventToImport.getProgram());
ProgramStage programStage = workContext.getProgramStage(IdScheme.UID, eventToImport.getProgramStage());
if (program != null && programStage != null && program.isRegistration() && !programStage.getRepeatable()) {
String eventContextId = programStage.getUid() + "-" + eventToImport.getEnrollment();
if (importableStageEvents.contains(eventContextId)) {
final ImportSummary is = new ImportSummary(ERROR, "ProgramStage " + eventToImport.getProgramStage() + " is not repeatable. Current payload contains duplicate event").setReference(eventToImport.getUid()).incrementIgnored();
importSummaries.addImportSummary(is);
} else {
importableEvents.add(eventToImport);
importableStageEvents.add(eventContextId);
}
} else {
importableEvents.add(eventToImport);
}
}
return importableEvents;
}
use of org.hisp.dhis.dxf2.importsummary.ImportStatus.ERROR in project dhis2-core by dhis2.
the class EventManager method updateEvent.
public ImportSummary updateEvent(final Event event, final WorkContext workContext) {
final List<Event> singleEvent = singletonList(event);
final ImportSummaries importSummaries = updateEvents(singleEvent, workContext);
if (isNotEmpty(importSummaries.getImportSummaries())) {
return importSummaries.getImportSummaries().get(0);
} else {
return error("Not updated", event.getEvent());
}
}
use of org.hisp.dhis.dxf2.importsummary.ImportStatus.ERROR in project dhis2-core by dhis2.
the class BaseEventAclCheck method check.
public ImportSummary check(ImmutableEvent event, WorkContext ctx) {
ImportOptions importOptions = ctx.getImportOptions();
ProgramStageInstance programStageInstance = prepareForAclValidation(ctx, event);
List<String> errors = checkAcl(ctx.getServiceDelegator().getTrackerAccessManager(), importOptions.getUser(), programStageInstance);
final ImportSummary importSummary = new ImportSummary();
if (!errors.isEmpty()) {
errors.forEach(error -> importSummary.addConflict(event.getUid(), error));
importSummary.incrementIgnored();
importSummary.setStatus(ImportStatus.ERROR);
importSummary.setReference(event.getEvent());
}
return importSummary;
}
use of org.hisp.dhis.dxf2.importsummary.ImportStatus.ERROR in project dhis2-core by dhis2.
the class ProgramStageInstanceBasicCheck method check.
@Override
public ImportSummary check(final ImmutableEvent event, final WorkContext ctx) {
final ProgramStageInstance programStageInstance = ctx.getProgramStageInstanceMap().get(event.getEvent());
if (programStageInstance == null) {
final ImportSummary error = error("Event ID " + event.getEvent() + " doesn't point to valid event", event.getEvent());
error.addConflict("Invalid Event ID", event.getEvent());
return error;
} else if (programStageInstance.isDeleted() || ctx.getImportOptions().getImportStrategy().isCreate()) {
return error("Event ID " + event.getEvent() + " was already used and/or deleted. This event can not be modified.").setReference(event.getEvent());
}
return success();
}
use of org.hisp.dhis.dxf2.importsummary.ImportStatus.ERROR in project dhis2-core by dhis2.
the class DataValueAclCheck method check.
@Override
public ImportSummary check(ImmutableEvent event, WorkContext ctx) {
final TrackerAccessManager trackerAccessManager = ctx.getServiceDelegator().getTrackerAccessManager();
final ProgramStageInstance programStageInstance = ctx.getProgramStageInstanceMap().get(event.getUid());
Map<String, Set<EventDataValue>> eventDataValueMap = ctx.getEventDataValueMap();
final User user = ctx.getImportOptions().getUser();
final ImportSummary importSummary = new ImportSummary();
// Note that here we are passing a ProgramStageInstance, which during a
// INSERT
// operation
// is going to be null, so the ACL method will not be able to check that
final Set<EventDataValue> dataValues = eventDataValueMap.get(event.getUid());
for (EventDataValue dataValue : dataValues) {
DataElement dataElement = ctx.getDataElementMap().get(dataValue.getDataElement());
List<String> errors = trackerAccessManager.canWrite(user, programStageInstance, dataElement, true);
if (!errors.isEmpty()) {
errors.forEach(error -> importSummary.addConflict(dataElement.getUid(), error));
}
}
return importSummary;
}
Aggregations