use of org.hisp.dhis.program.ProgramStage in project dhis2-core by dhis2.
the class HideProgramStageProgramRuleActionValidator method validate.
@Override
public ProgramRuleActionValidationResult validate(ProgramRuleAction programRuleAction, ProgramRuleActionValidationContext validationContext) {
ProgramRule rule = validationContext.getProgramRule();
if (!programRuleAction.hasProgramStage()) {
log.debug(String.format("ProgramStage cannot be null for program rule: %s ", rule.getName()));
return ProgramRuleActionValidationResult.builder().valid(false).errorReport(new ErrorReport(ProgramStage.class, ErrorCode.E4038, rule.getName())).build();
}
ProgramStage programStage = validationContext.getProgramStage();
if (programStage == null) {
programStage = validationContext.getProgramRuleActionValidationService().getProgramStageService().getProgramStage(programRuleAction.getProgramStage().getUid());
}
if (programStage == null) {
log.debug(String.format("ProgramStage: %s associated with program rule: %s does not exist", programRuleAction.getProgramStage().getUid(), rule.getName()));
return ProgramRuleActionValidationResult.builder().valid(false).errorReport(new ErrorReport(ProgramStage.class, ErrorCode.E4039, programRuleAction.getProgramStage().getUid(), rule.getName())).build();
}
return ProgramRuleActionValidationResult.builder().valid(true).build();
}
use of org.hisp.dhis.program.ProgramStage in project dhis2-core by dhis2.
the class ProgramRuleActionValidationContextLoader method load.
@Transactional(readOnly = true)
public ProgramRuleActionValidationContext load(Preheat preheat, PreheatIdentifier preheatIdentifier, ProgramRuleAction ruleAction) {
ProgramRule rule = preheat.get(preheatIdentifier, ProgramRule.class, ruleAction.getProgramRule());
Program program = preheat.get(preheatIdentifier, Program.class, rule.getProgram());
List<ProgramStage> stages = preheat.getAll(preheatIdentifier, new ArrayList<>(program.getProgramStages()));
return ProgramRuleActionValidationContext.builder().programRule(rule).program(program).programStages(stages).dataElement(ruleAction.hasDataElement() ? preheat.get(preheatIdentifier, DataElement.class, ruleAction.getDataElement()) : null).trackedEntityAttribute(ruleAction.hasTrackedEntityAttribute() ? preheat.get(preheatIdentifier, TrackedEntityAttribute.class, ruleAction.getAttribute()) : null).notificationTemplate(ruleAction.hasNotification() ? preheat.get(preheatIdentifier, ProgramNotificationTemplate.class, ruleAction.getTemplateUid()) : null).programStageSection(ruleAction.hasProgramStageSection() ? preheat.get(preheatIdentifier, ProgramStageSection.class, ruleAction.getProgramStageSection()) : null).programStage(ruleAction.hasProgramStage() ? preheat.get(preheatIdentifier, ProgramStage.class, ruleAction.getProgramStage()) : null).option(ruleAction.hasOption() ? preheat.get(preheatIdentifier, Option.class, ruleAction.getOption()) : null).optionGroup(ruleAction.hasOptionGroup() ? preheat.get(preheatIdentifier, OptionGroup.class, ruleAction.getOptionGroup()) : null).programRuleActionValidationService(validationService).build();
}
use of org.hisp.dhis.program.ProgramStage 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.program.ProgramStage in project dhis2-core by dhis2.
the class ObjectBundleServiceProgramTest method testCreateSimpleProgramWithSectionsNoReg.
@Test
void testCreateSimpleProgramWithSectionsNoReg() throws IOException {
Map<Class<? extends IdentifiableObject>, List<IdentifiableObject>> metadata = renderService.fromMetadata(new ClassPathResource("dxf2/program_noreg_sections.json").getInputStream(), RenderFormat.JSON);
ObjectBundleParams params = new ObjectBundleParams();
params.setObjectBundleMode(ObjectBundleMode.COMMIT);
params.setImportStrategy(ImportStrategy.CREATE);
params.setObjects(metadata);
ObjectBundle bundle = objectBundleService.create(params);
ObjectBundleValidationReport validate = objectBundleValidationService.validate(bundle);
assertFalse(validate.hasErrorReports());
objectBundleService.commit(bundle);
List<DataSet> dataSets = manager.getAll(DataSet.class);
List<OrganisationUnit> organisationUnits = manager.getAll(OrganisationUnit.class);
List<DataElement> dataElements = manager.getAll(DataElement.class);
List<UserAuthorityGroup> userRoles = manager.getAll(UserAuthorityGroup.class);
List<User> users = manager.getAll(User.class);
List<ValidationRule> validationRules = manager.getAll(ValidationRule.class);
List<Program> programs = manager.getAll(Program.class);
List<ProgramStage> programStages = manager.getAll(ProgramStage.class);
List<ProgramStageDataElement> programStageDataElements = manager.getAll(ProgramStageDataElement.class);
List<ProgramStageSection> programStageSections = manager.getAll(ProgramStageSection.class);
assertFalse(dataSets.isEmpty());
assertFalse(organisationUnits.isEmpty());
assertFalse(dataElements.isEmpty());
assertFalse(users.isEmpty());
assertFalse(userRoles.isEmpty());
assertEquals(1, validationRules.size());
assertEquals(1, programs.size());
assertEquals(1, programStages.size());
assertEquals(3, programStageDataElements.size());
assertEquals(2, programStageSections.size());
ProgramStage programStage = programStages.get(0);
assertEquals(3, programStage.getProgramStageDataElements().size());
assertEquals(2, programStage.getProgramStageSections().size());
}
use of org.hisp.dhis.program.ProgramStage in project dhis2-core by dhis2.
the class ObjectBundleServiceProgramTest method testCreateSimpleProgramReg.
@Test
void testCreateSimpleProgramReg() throws IOException {
Map<Class<? extends IdentifiableObject>, List<IdentifiableObject>> metadata = renderService.fromMetadata(new ClassPathResource("dxf2/program_reg1.json").getInputStream(), RenderFormat.JSON);
ObjectBundleParams params = new ObjectBundleParams();
params.setObjectBundleMode(ObjectBundleMode.COMMIT);
params.setImportStrategy(ImportStrategy.CREATE);
params.setObjects(metadata);
ObjectBundle bundle = objectBundleService.create(params);
ObjectBundleValidationReport validate = objectBundleValidationService.validate(bundle);
validate.forEachErrorReport(System.out::println);
assertFalse(validate.hasErrorReports());
objectBundleService.commit(bundle);
List<OrganisationUnit> organisationUnits = manager.getAll(OrganisationUnit.class);
List<DataElement> dataElements = manager.getAll(DataElement.class);
List<UserAuthorityGroup> userRoles = manager.getAll(UserAuthorityGroup.class);
List<User> users = manager.getAll(User.class);
List<Program> programs = manager.getAll(Program.class);
List<ProgramStage> programStages = manager.getAll(ProgramStage.class);
List<ProgramStageDataElement> programStageDataElements = manager.getAll(ProgramStageDataElement.class);
List<ProgramTrackedEntityAttribute> programTrackedEntityAttributes = manager.getAll(ProgramTrackedEntityAttribute.class);
assertFalse(organisationUnits.isEmpty());
assertFalse(dataElements.isEmpty());
assertFalse(users.isEmpty());
assertFalse(userRoles.isEmpty());
assertEquals(1, programs.size());
assertEquals(2, programStages.size());
assertEquals(4, programStageDataElements.size());
assertEquals(2, programTrackedEntityAttributes.size());
}
Aggregations