private void mergeNames(Patient preferred, Patient notPreferred, PersonMergeLogData mergedData) { // move all names // (must be done after all calls to services above so hbm doesn't try to save things prematurely (hacky) for (PersonName newName : notPreferred.getNames()) { boolean containsName = false; for (PersonName currentName : preferred.getNames()) { containsName = currentName.equalsContent(newName); if (containsName) { break; } } if (!containsName) { PersonName tmpName = constructTemporaryName(newName); preferred.addName(tmpName); mergedData.addCreatedName(tmpName.getUuid()); log.debug("Merging name " + newName.getGivenName() + " to " + preferred.getPatientId()); } } }
/** * This test verifies that {@link PersonName}s are fetched correctly from the hibernate cache. * (Or really, not fetched from the cache but instead are mapped with lazy=false. For some * reason Hibernate isn't able to find objects in the cache if a parent object was the one that * loaded them) * * @throws Exception */ @Test public void shouldFetchNamesForPersonsThatWereFirstFetchedAsPatients() throws Exception { Person person = Context.getPersonService().getPerson(2); Patient patient = Context.getPatientService().getPatient(2); patient.getNames().size(); person.getNames().size(); }
private void setPreferredPatientName(Patient patient) { PersonName preferredName = null; PersonName possiblePreferredName = patient.getPersonName(); if (possiblePreferredName != null && possiblePreferredName.getPreferred() && !possiblePreferredName.getVoided()) { preferredName = possiblePreferredName; } for (PersonName name : patient.getNames()) { if (preferredName == null && !name.getVoided()) { name.setPreferred(true); preferredName = name; continue; } if (!name.equals(preferredName)) { name.setPreferred(false); } } }
ContinuityOfCareDocument ccd = ConsolFactory.eINSTANCE.createContinuityOfCareDocument().init(); Patient patient = CDAFactory.eINSTANCE.createPatient(); PN pn = DatatypesFactory.eINSTANCE.createPN(); pn.addText("Plain Old Name Here"); patient.getNames().add(pn); ccd.addPatient(patient); CDAUtil.save(ccd, System.out);
/** * @see HibernatePatientDAO#getPatients(String, String, java.util.List, boolean, Integer, Integer, boolean) */ @Test public void getPatients_shouldNotMatchVoidedPatientNames_SignatureNo1() { List<Patient> patients = dao.getPatients("Oloo", 0, 11); Assert.assertEquals(1, patients.size()); Patient patient = patients.get(0); Set<PersonName> names = patient.getNames(); for (PersonName name : names) { name.setVoided(true); } dao.savePatient(patient); updateSearchIndex(); patients = dao.getPatients("Oloo", 0, 11); Assert.assertEquals(0, patients.size()); }
/** * @see PersonValidator#validate(Object,Errors) */ @Test public void validate_shouldFailValidationIfPersonDoesNotHaveAtleastOneNonVoidedName() { Patient pa = Context.getPatientService().getPatient(2); pa.getNames().clear(); Errors errors = new BindException(pa, "patient"); validator.validate(pa, errors); Assert.assertTrue(errors.hasFieldErrors("names")); }
/** * @see PatientDAO#getPatients(String, String, java.util.List, boolean, Integer, * Integer, boolean) */ @Test public void getPatients_shouldNotMatchVoidedPatientNames() { List<Patient> patients = dao.getPatients("Oloo", 0, 11); Assert.assertEquals(1, patients.size()); Patient patient = patients.get(0); Set<PersonName> names = patient.getNames(); for (PersonName name : names) { name.setVoided(true); } updateSearchIndex(); dao.savePatient(patient); patients = dao.getPatients("Oloo", 0, 11); Assert.assertEquals(0, patients.size()); }
/** * @see PatientService#mergePatients(Patient,Patient) */ @Test public void mergePatients_shouldCopyNonvoidedNamesToPreferredPatient() throws Exception { Patient preferred = patientService.getPatient(7); Patient notPreferred = patientService.getPatient(8); patientService.mergePatients(preferred, notPreferred); // make sure one of their addresses has the first name of "Anet" boolean found = false; for (PersonName pn : preferred.getNames()) { if (pn.getGivenName().equals("Anet")) { found = true; } } Assert.assertTrue("odd, user 7 didn't get user 8's names", found); }
@Test public void mergePatients_shouldMaintainSimilarButDifferentNames() throws Exception { executeDataSet(PATIENT_MERGE_XML); Patient preferredPatient = patientService.getPatient(10000); Patient nonPreferredPatient = patientService.getPatient(10001); patientService.mergePatients(preferredPatient, nonPreferredPatient); Set<PersonName> names = preferredPatient.getNames(); if ((PersonName.getFormat()).equals(OpenmrsConstants.PERSON_NAME_FORMAT_LONG)) { assertThat(names, containsFullName("President John Fitzgerald Kennedy Esq.")); } else { assertThat(names, containsFullName("John Fitzgerald Kennedy")); } }
for (PersonName n : preferred.getNames()) { if (n.getFullName().equals(name.getFullName())) { addedNameUuid = n.getUuid();
private PersonName getPreferredName() { for (PersonName name : patient.getNames()) { if (!name.isVoided() && name.isPreferred()) { return name; } } return null; }
Set<PersonName> patientNames = patient.getNames(); if (patientNames != null) { for (PersonName personName : patientNames) {
public PatientEditor editName(PersonName editedName) { Set<PersonName> personNames = patient.getNames(); if (personNames.isEmpty()) { patient.addName(editedName); return this; } for (PersonName currentName : personNames) { if (currentName.isVoided()) continue; if (currentName.isPreferred()) continue; if (editedName.isPreferred()) return editPreferredName(editedName); updateName(editedName, currentName); } return this; }
for (PersonName name : patient.getNames()) { if (!name.isPreferred() && name.getGivenName() != null) { webServicePatient.setFirstName(name.getGivenName());