use of org.openmrs.PatientProgram in project openmrs-core by openmrs.
the class ProgramWorkflowServiceUnitTest method purgePatientProgram_shouldFailGivenNonEmptyStatesAndTrueCascade.
@Test
public void purgePatientProgram_shouldFailGivenNonEmptyStatesAndTrueCascade() {
exception.expect(APIException.class);
exception.expectMessage("Cascade purging of PatientPrograms is not implemented yet");
PatientProgram patientProgram = new PatientProgram();
PatientState patientState = new PatientState();
patientProgram.getStates().add(patientState);
pws.purgePatientProgram(patientProgram, true);
}
use of org.openmrs.PatientProgram in project openmrs-core by openmrs.
the class ProgramWorkflowServiceUnitTest method savePatientProgram_shouldFailForNullPatient.
@Test
public void savePatientProgram_shouldFailForNullPatient() {
exception.expect(APIException.class);
exception.expectMessage("PatientProgram requires a Patient and a Program");
PatientProgram patientProgram = new PatientProgram(1);
patientProgram.setProgram(new Program(1));
pws.savePatientProgram(patientProgram);
}
use of org.openmrs.PatientProgram in project openmrs-core by openmrs.
the class PatientServiceImpl method mergeProgramEnrolments.
private void mergeProgramEnrolments(Patient preferred, Patient notPreferred, PersonMergeLogData mergedData) {
// copy all program enrollments
ProgramWorkflowService programService = Context.getProgramWorkflowService();
for (PatientProgram pp : programService.getPatientPrograms(notPreferred, null, null, null, null, null, false)) {
if (!pp.getVoided()) {
PatientProgram enroll = pp.copy();
enroll.setPatient(preferred);
log.debug("Copying patientProgram " + pp.getPatientProgramId() + " to " + preferred.getPatientId());
PatientProgram persisted = programService.savePatientProgram(enroll);
mergedData.addCreatedProgram(persisted.getUuid());
}
}
}
use of org.openmrs.PatientProgram in project openmrs-core by openmrs.
the class ProgramWorkflowServiceImpl method triggerStateConversion.
/**
* @see org.openmrs.api.ProgramWorkflowService#triggerStateConversion(org.openmrs.Patient,
* org.openmrs.Concept, java.util.Date)
*/
public void triggerStateConversion(Patient patient, Concept trigger, Date dateConverted) {
// Check input parameters
if (patient == null) {
throw new APIException("convert.state.invalid.patient", (Object[]) null);
}
if (trigger == null) {
throw new APIException("convert.state.patient.without.valid.trigger", (Object[]) null);
}
if (dateConverted == null) {
throw new APIException("convert.state.invalid.date", (Object[]) null);
}
for (PatientProgram patientProgram : getPatientPrograms(patient, null, null, null, null, null, false)) {
// skip past patient programs that already completed
if (patientProgram.getDateCompleted() == null) {
Set<ProgramWorkflow> workflows = patientProgram.getProgram().getWorkflows();
for (ProgramWorkflow workflow : workflows) {
// (getWorkflows() is only returning over nonretired workflows)
PatientState patientState = patientProgram.getCurrentState(workflow);
// #1080 cannot exit patient from care
// Should allow a transition from a null state to a terminal state
// Or we should require a user to ALWAYS add an initial workflow/state when a patient is added to a program
ProgramWorkflowState currentState = (patientState != null) ? patientState.getState() : null;
ProgramWorkflowState transitionState = workflow.getState(trigger);
log.debug("Transitioning from current state [" + currentState + "]");
log.debug("|---> Transitioning to final state [" + transitionState + "]");
if (transitionState != null && workflow.isLegalTransition(currentState, transitionState)) {
patientProgram.transitionToState(transitionState, dateConverted);
log.debug("State Conversion Triggered: patientProgram=" + patientProgram + " transition from " + currentState + " to " + transitionState + " on " + dateConverted);
}
}
// #1068 - Exiting a patient from care causes "not-null property references
// a null or transient value: org.openmrs.PatientState.dateCreated". Explicitly
// calling the savePatientProgram() method will populate the metadata properties.
//
// #1067 - We should explicitly save the patient program rather than let
// Hibernate do so when it flushes the session.
Context.getProgramWorkflowService().savePatientProgram(patientProgram);
}
}
}
use of org.openmrs.PatientProgram in project openmrs-core by openmrs.
the class PatientProgramValidatorTest method validate_shouldFailIfThereIsMoreThanOnePatientStateWithTheSameStatesAndStartDates.
/**
* @see PatientProgramValidator#validate(Object,Errors)
*/
@Test
public void validate_shouldFailIfThereIsMoreThanOnePatientStateWithTheSameStatesAndStartDates() {
PatientProgram program = Context.getProgramWorkflowService().getPatientProgram(1);
Set<PatientState> states = program.getStates();
Assert.assertNotNull(states);
PatientState patientState = states.iterator().next();
PatientState duplicate = patientState.copy();
states.add(duplicate);
BindException errors = new BindException(program, "");
new PatientProgramValidator().validate(program, errors);
Assert.assertTrue(errors.hasFieldErrors("states"));
}
Aggregations