use of org.hisp.dhis.program.ProgramStage in project dhis2-core by dhis2.
the class EventGeometryCheckTest method failOnEventWithGeometryAndProgramStageWithNoGeometry.
@Test
void failOnEventWithGeometryAndProgramStageWithNoGeometry() {
event.setGeometry(createRandomPoint());
ProgramStage programStage = createProgramStage();
programStage.setFeatureType(FeatureType.NONE);
when(workContext.getProgramStage(programStageIdScheme, event.getProgramStage())).thenReturn(programStage);
ImportSummary importSummary = rule.check(new ImmutableEvent(event), workContext);
assertHasError(importSummary, event, "Geometry (Point) does not conform to the feature type (None) specified for the program stage: " + programStage.getUid());
}
use of org.hisp.dhis.program.ProgramStage in project dhis2-core by dhis2.
the class ProgramInstanceRepeatableStageCheckTest method failOnNonRepeatableStageAndExistingEvents.
@Test
void failOnNonRepeatableStageAndExistingEvents() {
// Data preparation
Program program = createProgram('P');
TrackedEntityInstance tei = createTrackedEntityInstance('A', createOrganisationUnit('A'));
event.setProgramStage(CodeGenerator.generateUid());
event.setProgram(program.getUid());
event.setTrackedEntityInstance(tei.getUid());
ProgramStage programStage = createProgramStage('A', program);
programStage.setRepeatable(false);
when(workContext.getProgramStage(programStageIdScheme, event.getProgramStage())).thenReturn(programStage);
Map<String, Program> programMap = new HashMap<>();
programMap.put(program.getUid(), program);
Map<String, ProgramInstance> programInstanceMap = new HashMap<>();
ProgramInstance programInstance = new ProgramInstance();
programInstanceMap.put(event.getUid(), programInstance);
Pair<TrackedEntityInstance, Boolean> teiPair = Pair.of(tei, true);
Map<String, Pair<TrackedEntityInstance, Boolean>> teiMap = new HashMap<>();
teiMap.put(event.getUid(), teiPair);
when(workContext.getTrackedEntityInstanceMap()).thenReturn(teiMap);
when(workContext.getProgramsMap()).thenReturn(programMap);
when(workContext.getProgramInstanceMap()).thenReturn(programInstanceMap);
when(workContext.getServiceDelegator()).thenReturn(serviceDelegator);
when(serviceDelegator.getJdbcTemplate()).thenReturn(jdbcTemplate);
when(jdbcTemplate.queryForObject(anyString(), eq(Boolean.class), eq(programInstance.getId()), eq(programStage.getId()), eq(tei.getId()))).thenReturn(true);
// Method under test
ImportSummary summary = rule.check(new ImmutableEvent(event), workContext);
assertHasError(summary, event, "Program stage is not repeatable and an event already exists");
}
use of org.hisp.dhis.program.ProgramStage in project dhis2-core by dhis2.
the class MetadataImportServiceTest method testMetadataImportWithDeletedProgramStageSection.
@Test
void testMetadataImportWithDeletedProgramStageSection() throws IOException {
Map<Class<? extends IdentifiableObject>, List<IdentifiableObject>> metadata = renderService.fromMetadata(new ClassPathResource("dxf2/programstage_with_sections.json").getInputStream(), RenderFormat.JSON);
MetadataImportParams params = createParams(ImportStrategy.CREATE_AND_UPDATE, metadata);
ImportReport report = importService.importMetadata(params);
assertEquals(Status.OK, report.getStatus());
dbmsManager.clearSession();
ProgramStage programStage = programStageService.getProgramStage("NpsdDv6kKSO");
assertNotNull(programStage.getProgramStageSections());
assertNotNull(manager.get(ProgramStageSection.class, "JwcV2ZifEQf"));
metadata = renderService.fromMetadata(new ClassPathResource("dxf2/programstage_with_removed_section.json").getInputStream(), RenderFormat.JSON);
params = createParams(ImportStrategy.UPDATE, metadata);
params.setMetadataSyncImport(true);
report = importService.importMetadata(params);
report.forEachErrorReport(errorReport -> log.error("Error report:" + errorReport));
assertEquals(Status.OK, report.getStatus());
programStage = manager.get(ProgramStage.class, "NpsdDv6kKSO");
assertEquals(1, programStage.getProgramStageSections().size());
assertNull(manager.get(ProgramStageSection.class, "JwcV2ZifEQf"));
metadata = renderService.fromMetadata(new ClassPathResource("dxf2/programstage_with_all_section_removed.json").getInputStream(), RenderFormat.JSON);
params.setImportMode(ObjectBundleMode.COMMIT);
params.setImportStrategy(ImportStrategy.UPDATE);
params.setObjects(metadata);
params.setMetadataSyncImport(true);
report = importService.importMetadata(params);
assertEquals(Status.OK, report.getStatus());
programStage = manager.get(ProgramStage.class, "NpsdDv6kKSO");
assertEquals(true, programStage.getProgramStageSections().isEmpty());
}
use of org.hisp.dhis.program.ProgramStage in project dhis2-core by dhis2.
the class PreCheckMetaValidationHook method validateEvent.
@Override
public void validateEvent(ValidationErrorReporter reporter, Event event) {
TrackerImportValidationContext context = reporter.getValidationContext();
OrganisationUnit organisationUnit = context.getOrganisationUnit(event.getOrgUnit());
reporter.addErrorIfNull(organisationUnit, event, E1011, event.getOrgUnit());
Program program = context.getProgram(event.getProgram());
reporter.addErrorIfNull(program, event, E1010, event.getProgram());
ProgramStage programStage = context.getProgramStage(event.getProgramStage());
reporter.addErrorIfNull(programStage, event, E1013, event.getProgramStage());
}
use of org.hisp.dhis.program.ProgramStage in project dhis2-core by dhis2.
the class PreCheckSecurityOwnershipValidationHook method validateEvent.
@Override
public void validateEvent(ValidationErrorReporter reporter, Event event) {
TrackerImportValidationContext context = reporter.getValidationContext();
TrackerImportStrategy strategy = context.getStrategy(event);
TrackerBundle bundle = context.getBundle();
User user = bundle.getUser();
checkNotNull(user, USER_CANT_BE_NULL);
checkNotNull(event, EVENT_CANT_BE_NULL);
checkNotNull(event.getOrgUnit(), ORGANISATION_UNIT_CANT_BE_NULL);
OrganisationUnit organisationUnit = context.getOrganisationUnit(event.getOrgUnit());
ProgramStage programStage = context.getProgramStage(event.getProgramStage());
Program program = context.getProgram(event.getProgram());
// has to be checked
if (program.isWithoutRegistration() || strategy.isCreate() || strategy.isDelete()) {
checkOrgUnitInCaptureScope(reporter, event, organisationUnit);
}
String teiUid = getTeiUidFromEvent(context, event, program);
CategoryOptionCombo categoryOptionCombo = bundle.getPreheat().getCategoryOptionCombo(event.getAttributeOptionCombo());
OrganisationUnit ownerOrgUnit = context.getOwnerOrganisationUnit(teiUid, program.getUid());
// Check acting user is allowed to change existing/write event
if (strategy.isUpdateOrDelete()) {
ProgramStageInstance programStageInstance = context.getProgramStageInstance(event.getEvent());
TrackedEntityInstance entityInstance = programStageInstance.getProgramInstance().getEntityInstance();
validateUpdateAndDeleteEvent(reporter, event, programStageInstance, entityInstance == null ? null : entityInstance.getUid(), ownerOrgUnit);
} else {
validateCreateEvent(reporter, event, user, categoryOptionCombo, programStage, teiUid, organisationUnit, ownerOrgUnit, program, event.isCreatableInSearchScope());
}
}
Aggregations