/** * @see VisitService#saveVisit(Visit) */ @Test public void saveVisit_shouldVoidAnAttributeIfMaxOccursIs1AndSameAttributeTypeAlreadyExists() { executeDataSet(VISITS_ATTRIBUTES_XML); Visit visit = new Visit(new Patient(2), new VisitType(3), new Date()); visit.setAttribute(createVisitAttribute(new Date())); visit.setAttribute(createVisitAttribute(new Date(System.currentTimeMillis() - 1000000))); assertEquals(1, visit.getAttributes().size()); visit = visitService.saveVisit(visit); assertNotNull(visit.getId()); visit.setAttribute(createVisitAttribute("second visit")); assertEquals(2, visit.getAttributes().size()); VisitAttribute firstAttribute = (VisitAttribute) visit.getAttributes().toArray()[0]; assertTrue(firstAttribute.getVoided()); }
/** * @see VisitService#saveVisit(Visit) */ @Test public void saveVisit_shouldSaveAVisitThoughChangedByAndDateCreatedAreNotSetForVisitAttributeExplictly() { executeDataSet(VISITS_ATTRIBUTES_XML); Visit visit = new Visit(new Patient(2), new VisitType(3), new Date()); VisitAttribute visitAttribute = createVisitAttributeWithoutCreatorAndDateCreated(); visit.setAttribute(visitAttribute); visit = visitService.saveVisit(visit); assertNotNull(visit.getId()); }
/** * @see org.openmrs.module.webservices.rest.web.resource.impl.DelegatingResourceHandler#save(java.lang.Object) */ @Override public VisitAttribute save(VisitAttribute delegate) { if (delegate.getAttributeType().getMaxOccurs() != null && delegate.getAttributeType().getMaxOccurs() == 1) { // there is a convencience method for this case, that avoids the client having to make two calls (to void and create) delegate.getVisit().setAttribute(delegate); } else { // make sure it has not already been added to the visit boolean needToAdd = true; for (VisitAttribute pa : delegate.getVisit().getActiveAttributes()) { if (pa.equals(delegate)) { needToAdd = false; break; } } if (needToAdd) { delegate.getVisit().addAttribute(delegate); } } Context.getVisitService().saveVisit(delegate.getVisit()); return delegate; }