use of org.hisp.dhis.programrule.ProgramRule in project dhis2-core by dhis2.
the class ProgramRuleIntegrationTest method setUpTest.
@Override
public void setUpTest() throws Exception {
renderService = _renderService;
userService = _userService;
Map<Class<? extends IdentifiableObject>, List<IdentifiableObject>> metadata = renderService.fromMetadata(new ClassPathResource("tracker/simple_metadata.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 validationReport = objectBundleValidationService.validate(bundle);
assertFalse(validationReport.hasErrorReports());
objectBundleService.commit(bundle);
Program program = bundle.getPreheat().get(PreheatIdentifier.UID, Program.class, "BFcipDERJnf");
Program programWithoutRegistration = bundle.getPreheat().get(PreheatIdentifier.UID, Program.class, "BFcipDERJne");
DataElement dataElement1 = bundle.getPreheat().get(PreheatIdentifier.UID, DataElement.class, "DATAEL00001");
DataElement dataElement2 = bundle.getPreheat().get(PreheatIdentifier.UID, DataElement.class, "DATAEL00002");
ProgramStage programStage = bundle.getPreheat().get(PreheatIdentifier.UID, ProgramStage.class, "NpsdDv6kKSO");
ProgramRuleVariable programRuleVariable = createProgramRuleVariableWithDataElement('A', program, dataElement2);
programRuleVariableService.addProgramRuleVariable(programRuleVariable);
ProgramRule programRuleA = createProgramRule('A', program);
programRuleA.setUid("ProgramRule");
programRuleService.addProgramRule(programRuleA);
ProgramRule programRuleWithoutRegistration = createProgramRule('W', programWithoutRegistration);
programRuleService.addProgramRule(programRuleWithoutRegistration);
ProgramRule programRuleB = createProgramRule('B', program);
programRuleB.setProgramStage(programStage);
programRuleService.addProgramRule(programRuleB);
ProgramRuleAction programRuleActionShowWarning = createProgramRuleAction('A', programRuleA);
programRuleActionShowWarning.setProgramRuleActionType(ProgramRuleActionType.SHOWWARNING);
programRuleActionShowWarning.setContent("WARNING");
programRuleActionService.addProgramRuleAction(programRuleActionShowWarning);
ProgramRuleAction programRuleActionAssign = createProgramRuleAction('C', programRuleA);
programRuleActionAssign.setProgramRuleActionType(ProgramRuleActionType.ASSIGN);
programRuleActionAssign.setData("#{ProgramRuleVariableA}");
programRuleActionAssign.setDataElement(dataElement1);
programRuleActionService.addProgramRuleAction(programRuleActionAssign);
ProgramRuleAction programRuleActionShowWarningForProgramStage = createProgramRuleAction('B', programRuleB);
programRuleActionShowWarningForProgramStage.setProgramRuleActionType(ProgramRuleActionType.SHOWWARNING);
programRuleActionShowWarningForProgramStage.setContent("PROGRAM STAGE WARNING");
programRuleActionService.addProgramRuleAction(programRuleActionShowWarningForProgramStage);
programRuleA.getProgramRuleActions().add(programRuleActionShowWarning);
programRuleA.getProgramRuleActions().add(programRuleActionAssign);
programRuleWithoutRegistration.getProgramRuleActions().add(programRuleActionShowWarning);
programRuleService.updateProgramRule(programRuleWithoutRegistration);
programRuleB.getProgramRuleActions().add(programRuleActionShowWarningForProgramStage);
programRuleService.updateProgramRule(programRuleB);
userA = userService.getUser("M5zQapPyTZI");
injectSecurityContext(userA);
}
use of org.hisp.dhis.programrule.ProgramRule in project dhis2-core by dhis2.
the class BaseProgramRuleActionValidator method validate.
@Override
public ProgramRuleActionValidationResult validate(ProgramRuleAction programRuleAction, ProgramRuleActionValidationContext validationContext) {
ProgramRule rule = validationContext.getProgramRule();
if (!programRuleAction.hasDataElement() && !programRuleAction.hasTrackedEntityAttribute()) {
log.debug(String.format("DataElement or TrackedEntityAttribute cannot be null for program rule: %s ", rule.getName()));
return ProgramRuleActionValidationResult.builder().valid(false).errorReport(new ErrorReport(DataElement.class, ErrorCode.E4044, rule.getName())).build();
}
Program program = Optional.ofNullable(validationContext.getProgram()).orElse(validationContext.getProgramRuleActionValidationService().getProgramService().getProgram(rule.getProgram().getUid()));
if (programRuleAction.hasDataElement()) {
return handleDataElement(validationContext, programRuleAction, program);
}
if (programRuleAction.hasTrackedEntityAttribute()) {
return handleTrackedEntityAttribute(validationContext, programRuleAction, program);
}
return ProgramRuleActionValidationResult.builder().valid(true).build();
}
use of org.hisp.dhis.programrule.ProgramRule in project dhis2-core by dhis2.
the class BaseProgramRuleActionValidator method handleTrackedEntityAttribute.
private ProgramRuleActionValidationResult handleTrackedEntityAttribute(ProgramRuleActionValidationContext validationContext, ProgramRuleAction programRuleAction, Program program) {
ProgramRule rule = validationContext.getProgramRule();
TrackedEntityAttribute attribute = validationContext.getTrackedEntityAttribute();
if (attribute == null) {
log.debug(String.format("TrackedEntityAttribute: %s associated with program rule: %s does not exist", programRuleAction.getAttribute().getUid(), rule.getName()));
return ProgramRuleActionValidationResult.builder().valid(false).errorReport(new ErrorReport(TrackedEntityAttribute.class, ErrorCode.E4046, programRuleAction.getAttribute().getUid(), rule.getName())).build();
}
List<String> trackedEntityAttributes = program.getProgramAttributes().stream().map(att -> att.getAttribute().getUid()).collect(Collectors.toList());
if (!trackedEntityAttributes.contains(attribute.getUid())) {
log.debug(String.format("TrackedEntityAttribute: %s is not linked to any ProgramTrackedEntityAttribute", attribute.getUid()));
return ProgramRuleActionValidationResult.builder().valid(false).errorReport(new ErrorReport(TrackedEntityAttribute.class, ErrorCode.E4048, attribute.getUid(), rule.getName())).build();
}
return ProgramRuleActionValidationResult.builder().valid(true).build();
}
use of org.hisp.dhis.programrule.ProgramRule 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.programrule.ProgramRule in project dhis2-core by dhis2.
the class NotificationProgramRuleActionValidator method validate.
@Override
public ProgramRuleActionValidationResult validate(ProgramRuleAction programRuleAction, ProgramRuleActionValidationContext validationContext) {
ProgramRule rule = validationContext.getProgramRule();
if (!programRuleAction.hasNotification()) {
log.debug(String.format("ProgramNotificationTemplate cannot be null for program rule: %s ", rule.getName()));
return ProgramRuleActionValidationResult.builder().valid(false).errorReport(new ErrorReport(ProgramNotificationTemplate.class, ErrorCode.E4035, rule.getName())).build();
}
// fetch notification from preheat
ProgramNotificationTemplate pnt = validationContext.getNotificationTemplate();
if (pnt == null) {
// fetch it from database
pnt = validationContext.getProgramRuleActionValidationService().getNotificationTemplateService().getByUid(programRuleAction.getTemplateUid());
}
if (pnt == null) {
log.debug(String.format("ProgramNotificationTemplate id: %s for program rule: %s does not exist", programRuleAction.getTemplateUid(), rule.getName()));
return ProgramRuleActionValidationResult.builder().valid(false).errorReport(new ErrorReport(ProgramNotificationTemplate.class, ErrorCode.E4034, programRuleAction.getTemplateUid(), rule.getName())).build();
}
return ProgramRuleActionValidationResult.builder().valid(true).build();
}
Aggregations