Search in sources :

Example 6 with ERROR

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;
}
Also used : Program(org.hisp.dhis.program.Program) ImportSummary(org.hisp.dhis.dxf2.importsummary.ImportSummary) ArrayList(java.util.ArrayList) Event(org.hisp.dhis.dxf2.events.event.Event) ImmutableEvent(org.hisp.dhis.dxf2.events.importer.shared.ImmutableEvent) ProgramStage(org.hisp.dhis.program.ProgramStage) HashSet(java.util.HashSet)

Example 7 with ERROR

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());
    }
}
Also used : Event(org.hisp.dhis.dxf2.events.event.Event) ImmutableEvent(org.hisp.dhis.dxf2.events.importer.shared.ImmutableEvent) ImportSummaries(org.hisp.dhis.dxf2.importsummary.ImportSummaries)

Example 8 with ERROR

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;
}
Also used : ImportSummary(org.hisp.dhis.dxf2.importsummary.ImportSummary) ImportOptions(org.hisp.dhis.dxf2.common.ImportOptions) ProgramStageInstance(org.hisp.dhis.program.ProgramStageInstance)

Example 9 with ERROR

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();
}
Also used : ImportSummary(org.hisp.dhis.dxf2.importsummary.ImportSummary) ProgramStageInstance(org.hisp.dhis.program.ProgramStageInstance)

Example 10 with ERROR

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;
}
Also used : DataElement(org.hisp.dhis.dataelement.DataElement) Set(java.util.Set) User(org.hisp.dhis.user.User) ImportSummary(org.hisp.dhis.dxf2.importsummary.ImportSummary) TrackerAccessManager(org.hisp.dhis.trackedentity.TrackerAccessManager) EventDataValue(org.hisp.dhis.eventdatavalue.EventDataValue) ProgramStageInstance(org.hisp.dhis.program.ProgramStageInstance)

Aggregations

ImportSummary (org.hisp.dhis.dxf2.importsummary.ImportSummary)33 Test (org.junit.jupiter.api.Test)25 User (org.hisp.dhis.user.User)21 TransactionalIntegrationTest (org.hisp.dhis.TransactionalIntegrationTest)20 IOException (java.io.IOException)15 Event (org.hisp.dhis.dxf2.events.event.Event)14 List (java.util.List)12 ImportSummaries (org.hisp.dhis.dxf2.importsummary.ImportSummaries)11 WebMessageException (org.hisp.dhis.dxf2.webmessage.WebMessageException)9 ImportStrategy (org.hisp.dhis.importexport.ImportStrategy)9 ClassPathResource (org.springframework.core.io.ClassPathResource)9 ImportReport (org.hisp.dhis.dxf2.metadata.feedback.ImportReport)8 ProgramStageInstance (org.hisp.dhis.program.ProgramStageInstance)7 GetMapping (org.springframework.web.bind.annotation.GetMapping)7 ArrayList (java.util.ArrayList)6 FileResource (org.hisp.dhis.fileresource.FileResource)6 SchemaService (org.hisp.dhis.schema.SchemaService)6 UserService (org.hisp.dhis.user.UserService)6 Autowired (org.springframework.beans.factory.annotation.Autowired)6 InputStream (java.io.InputStream)4