Search in sources :

Example 6 with ProgramWorkflowState

use of org.openmrs.ProgramWorkflowState in project openmrs-core by openmrs.

the class ProgramWorkflowServiceTest method getState_shouldGetStateAssociatedWithGivenIdIfWorkflowStateIdExists.

@Test
public void getState_shouldGetStateAssociatedWithGivenIdIfWorkflowStateIdExists() {
    final Integer EXISTING_WORKFLOW_STATE_ID = 1;
    ProgramWorkflowState state = pws.getState(EXISTING_WORKFLOW_STATE_ID);
    assertNotNull("ProgramWorkflowState not found", state);
    assertThat(state.getId(), is(EXISTING_WORKFLOW_STATE_ID));
}
Also used : ProgramWorkflowState(org.openmrs.ProgramWorkflowState) Test(org.junit.Test) BaseContextSensitiveTest(org.openmrs.test.BaseContextSensitiveTest)

Example 7 with ProgramWorkflowState

use of org.openmrs.ProgramWorkflowState in project openmrs-core by openmrs.

the class ProgramWorkflowServiceTest method saveProgram_shouldCreateProgramWorkflows.

/**
 * Tests creating a new program containing workflows and states
 *
 * @see ProgramWorkflowService#saveProgram(Program)
 */
@Test
public void saveProgram_shouldCreateProgramWorkflows() {
    int numBefore = Context.getProgramWorkflowService().getAllPrograms().size();
    Program program = new Program();
    program.setName("TEST PROGRAM");
    program.setDescription("TEST PROGRAM DESCRIPTION");
    program.setConcept(cs.getConcept(3));
    ProgramWorkflow workflow = new ProgramWorkflow();
    workflow.setConcept(cs.getConcept(4));
    program.addWorkflow(workflow);
    ProgramWorkflowState state1 = new ProgramWorkflowState();
    state1.setConcept(cs.getConcept(5));
    state1.setInitial(true);
    state1.setTerminal(false);
    workflow.addState(state1);
    ProgramWorkflowState state2 = new ProgramWorkflowState();
    state2.setConcept(cs.getConcept(6));
    state2.setInitial(false);
    state2.setTerminal(true);
    workflow.addState(state2);
    Context.getProgramWorkflowService().saveProgram(program);
    assertEquals("Failed to create program", numBefore + 1, Context.getProgramWorkflowService().getAllPrograms().size());
    Program p = Context.getProgramWorkflowService().getProgramByName("TEST PROGRAM");
    assertNotNull("Program is null", p);
    assertNotNull("Workflows is null", p.getWorkflows());
    assertEquals("Wrong number of workflows", 1, p.getWorkflows().size());
    ProgramWorkflow wf = p.getWorkflowByName("CIVIL STATUS");
    assertNotNull(wf);
    List<String> names = new ArrayList<>();
    for (ProgramWorkflowState s : wf.getStates()) {
        names.add(s.getConcept().getName().getName());
    }
    TestUtil.assertCollectionContentsEquals(Arrays.asList("SINGLE", "MARRIED"), names);
}
Also used : ProgramWorkflow(org.openmrs.ProgramWorkflow) PatientProgram(org.openmrs.PatientProgram) Program(org.openmrs.Program) ProgramWorkflowState(org.openmrs.ProgramWorkflowState) ArrayList(java.util.ArrayList) Test(org.junit.Test) BaseContextSensitiveTest(org.openmrs.test.BaseContextSensitiveTest)

Example 8 with ProgramWorkflowState

use of org.openmrs.ProgramWorkflowState in project openmrs-core by openmrs.

the class MigrationHelper method importProgramsAndStatuses.

public static int importProgramsAndStatuses(List<String> programWorkflow) throws ParseException {
    ProgramWorkflowService pws = Context.getProgramWorkflowService();
    PatientService ps = Context.getPatientService();
    List<PatientProgram> patientPrograms = new ArrayList<>();
    Map<String, PatientProgram> knownPatientPrograms = new HashMap<>();
    Map<String, Program> programsByName = new HashMap<>();
    for (Program program : pws.getAllPrograms()) {
        programsByName.put(program.getConcept().getName(Context.getLocale(), false).getName(), program);
    }
    for (String s : programWorkflow) {
        // ENROLLMENT:HIVEMR-V1,9266,IMB HIV PROGRAM,2005-08-25,
        log.debug(s);
        if (s.startsWith("ENROLLMENT:")) {
            s = s.substring(s.indexOf(":") + 1);
            String[] temp = s.split(",");
            PatientIdentifierType pit = ps.getPatientIdentifierTypeByName(temp[0]);
            String identifier = temp[1];
            List<PatientIdentifier> pis = ps.getPatientIdentifiers(identifier, Collections.singletonList(pit), null, null, null);
            if (pis.size() != 1) {
                throw new IllegalArgumentException("Found " + pis.size() + " instances of identifier " + identifier + " of type " + pit);
            }
            Patient p = pis.get(0).getPatient();
            Program program = programsByName.get(temp[2]);
            if (program == null) {
                throw new RuntimeException("Couldn't find program \"" + temp[2] + "\" in " + programsByName);
            }
            Date enrollmentDate = temp.length < 4 ? null : parseDate(temp[3]);
            Date completionDate = temp.length < 5 ? null : parseDate(temp[4]);
            PatientProgram pp = new PatientProgram();
            pp.setPatient(p);
            pp.setProgram(program);
            pp.setDateEnrolled(enrollmentDate);
            pp.setDateCompleted(completionDate);
            patientPrograms.add(pp);
            // "HIVEMR-V1,9266,IMB HIV PROGRAM"
            knownPatientPrograms.put(temp[0] + "," + temp[1] + "," + temp[2], pp);
        } else if (s.startsWith("STATUS:")) {
            // STATUS:HIVEMR-V1,9266,IMB HIV PROGRAM,TREATMENT STATUS,ACTIVE,2005-08-25,,
            s = s.substring(s.indexOf(":") + 1);
            String[] temp = s.split(",");
            Program program = programsByName.get(temp[2]);
            if (program == null) {
                throw new RuntimeException("Couldn't find program \"" + temp[2] + "\" in " + programsByName);
            }
            ProgramWorkflow wf = program.getWorkflowByName(temp[3]);
            if (wf == null) {
                throw new RuntimeException("Couldn't find workflow \"" + temp[3] + "\" for program " + program + " (in " + program.getAllWorkflows() + ")");
            }
            ProgramWorkflowState st = wf.getStateByName(temp[4]);
            if (st == null) {
                throw new RuntimeException("Couldn't find state \"" + temp[4] + "\" for workflow " + wf + " (in " + wf.getStates() + ")");
            }
            Date startDate = temp.length < 6 ? null : parseDate(temp[5]);
            Date endDate = temp.length < 7 ? null : parseDate(temp[6]);
            PatientState state = new PatientState();
            PatientProgram pp = knownPatientPrograms.get(temp[0] + "," + temp[1] + "," + temp[2]);
            state.setPatientProgram(pp);
            state.setState(st);
            state.setStartDate(startDate);
            state.setEndDate(endDate);
            pp.getStates().add(state);
        }
    }
    int numAdded = 0;
    for (PatientProgram pp : knownPatientPrograms.values()) {
        pws.savePatientProgram(pp);
        ++numAdded;
    }
    return numAdded;
}
Also used : ProgramWorkflow(org.openmrs.ProgramWorkflow) PatientProgram(org.openmrs.PatientProgram) Program(org.openmrs.Program) HashMap(java.util.HashMap) ProgramWorkflowService(org.openmrs.api.ProgramWorkflowService) ArrayList(java.util.ArrayList) Patient(org.openmrs.Patient) PatientProgram(org.openmrs.PatientProgram) PatientIdentifier(org.openmrs.PatientIdentifier) Date(java.util.Date) PatientState(org.openmrs.PatientState) PatientService(org.openmrs.api.PatientService) ProgramWorkflowState(org.openmrs.ProgramWorkflowState) PatientIdentifierType(org.openmrs.PatientIdentifierType)

Example 9 with ProgramWorkflowState

use of org.openmrs.ProgramWorkflowState in project openmrs-core by openmrs.

the class PatientProgramValidatorTest method validate_shouldPassForPatientStatesThatHaveTheSameStartDatesInTheSameWorkFlow.

/**
 * @see PatientProgramValidator#validate(Object,Errors)
 */
@Test
public void validate_shouldPassForPatientStatesThatHaveTheSameStartDatesInTheSameWorkFlow() {
    PatientProgram program = Context.getProgramWorkflowService().getPatientProgram(1);
    PatientState patientState = program.getStates().iterator().next();
    // add a new state by moving the patient to a another one
    ProgramWorkflowState nextState = patientState.getState().getProgramWorkflow().getState(4);
    patientState.getPatientProgram().transitionToState(nextState, patientState.getStartDate());
    BindException errors = new BindException(program, "");
    new PatientProgramValidator().validate(program, errors);
    Assert.assertEquals(false, errors.hasFieldErrors("states"));
}
Also used : ProgramWorkflowState(org.openmrs.ProgramWorkflowState) BindException(org.springframework.validation.BindException) PatientProgram(org.openmrs.PatientProgram) PatientState(org.openmrs.PatientState) Test(org.junit.Test) BaseContextSensitiveTest(org.openmrs.test.BaseContextSensitiveTest)

Example 10 with ProgramWorkflowState

use of org.openmrs.ProgramWorkflowState in project openmrs-core by openmrs.

the class ProgramWorkflowServiceUnitTest method saveProgram_shouldFailIfProgramWorkFlowStateTerminalIsNull.

@Test
public void saveProgram_shouldFailIfProgramWorkFlowStateTerminalIsNull() {
    exception.expect(APIException.class);
    exception.expectMessage("ProgramWorkflowState concept, initial, terminal are required");
    Program program = new Program();
    program.setName("TEST PROGRAM");
    program.setDescription("TEST PROGRAM DESCRIPTION");
    program.setConcept(new Concept(1));
    ProgramWorkflow workflow = new ProgramWorkflow();
    workflow.setConcept(new Concept(2));
    ProgramWorkflowState state1 = new ProgramWorkflowState();
    state1.setConcept(new Concept(3));
    state1.setInitial(true);
    workflow.addState(state1);
    program.addWorkflow(workflow);
    pws.saveProgram(program);
}
Also used : Concept(org.openmrs.Concept) ProgramWorkflow(org.openmrs.ProgramWorkflow) PatientProgram(org.openmrs.PatientProgram) Program(org.openmrs.Program) ProgramWorkflowState(org.openmrs.ProgramWorkflowState) Test(org.junit.Test)

Aggregations

ProgramWorkflowState (org.openmrs.ProgramWorkflowState)12 Test (org.junit.Test)9 ProgramWorkflow (org.openmrs.ProgramWorkflow)9 PatientProgram (org.openmrs.PatientProgram)8 Program (org.openmrs.Program)6 BaseContextSensitiveTest (org.openmrs.test.BaseContextSensitiveTest)6 Concept (org.openmrs.Concept)4 PatientState (org.openmrs.PatientState)3 ArrayList (java.util.ArrayList)2 Date (java.util.Date)2 HashMap (java.util.HashMap)1 ConceptName (org.openmrs.ConceptName)1 Patient (org.openmrs.Patient)1 PatientIdentifier (org.openmrs.PatientIdentifier)1 PatientIdentifierType (org.openmrs.PatientIdentifierType)1 APIException (org.openmrs.api.APIException)1 PatientService (org.openmrs.api.PatientService)1 ProgramWorkflowService (org.openmrs.api.ProgramWorkflowService)1 BindException (org.springframework.validation.BindException)1