private Obs saveExistingObs(Obs obs, String changeMessage) { // get a copy of the passed in obs and save it to the // database. This allows us to create a new row and new obs_id // this method doesn't copy the obs_id Obs newObs = Obs.newInstance(obs); unsetVoidedAndCreationProperties(newObs,obs); Obs.Status originalStatus = dao.getSavedStatus(obs); updateStatusIfNecessary(newObs, originalStatus); RequiredDataAdvice.recursivelyHandle(SaveHandler.class, newObs, changeMessage); // save the new row to the database with the changes that // have been made to it dao.saveObs(newObs); saveObsGroup(newObs,null); voidExistingObs(obs, changeMessage, newObs); return newObs; }
/** * Tests that we support a manual workaround in case you need to modify a FINAL obs and leave its status as FINAL */ @Test public void shouldNotAutomaticallySetStatusWhenManuallyCopyingAnObs() throws Exception { Obs existing = obsService.getObs(7); Obs newObs = Obs.newInstance(existing); newObs.setValueNumeric(60.0); newObs.setPreviousVersion(existing); newObs = obsService.saveObs(newObs, null); obsService.voidObs(existing, "testing"); assertThat(existing.getStatus(), is(Obs.Status.FINAL)); assertThat(existing.getVoided(), is(true)); assertThat(newObs.getStatus(), is(Obs.Status.FINAL)); } }
@Test public void newInstance_shouldCopyMostFields() throws Exception { Obs obs = new Obs(); obs.setStatus(Obs.Status.PRELIMINARY); obs.setInterpretation(Obs.Interpretation.LOW); obs.setConcept(new Concept()); obs.setValueNumeric(1.2); Obs copy = Obs.newInstance(obs); // these fields are not copied assertThat(copy.getObsId(), nullValue()); assertThat(copy.getUuid(), not(obs.getUuid())); // other fields are copied assertThat(copy.getConcept(), is(obs.getConcept())); assertThat(copy.getValueNumeric(), is(obs.getValueNumeric())); assertThat(copy.getStatus(), is(obs.getStatus())); assertThat(copy.getInterpretation(), is(obs.getInterpretation())); // TODO test that the rest of the fields are set }
Obs obsCopy = Obs.newInstance(obs); obsCopy.setEncounter(target); obsCopy.setPerson(patient);
newObs.addGroupMember(member); } else { Obs newMember = Obs.newInstance(member); newMember.setPreviousVersion(member); newObs.addGroupMember(newMember);