Skip to content

Commit 94ef0df

Browse files
committedMay 9, 2013
Manage preferred status for PersonName, PersonAddress and
PatientIdentifier in the API - TRUNK-2200 Taken care of patient identifier and also updated savePatient - TRUNK-2200
1 parent 8b70192 commit 94ef0df

File tree

5 files changed

+185
-14
lines changed

5 files changed

+185
-14
lines changed
 

‎api/src/main/java/org/openmrs/api/PatientService.java

+3
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ public interface PatientService extends OpenmrsService {
7777
* @should update an existing patient
7878
* @should fail when patient does not have required patient identifiers
7979
* @should update the date changed and changed by on update of the person address
80+
* @should set the preferred name address and identifier if none is specified
81+
* @should not set the preferred name address and identifier if they already exist
82+
* @should not set a voided name or address or identifier as preferred
8083
*/
8184
@Authorized( { PrivilegeConstants.ADD_PATIENTS, PrivilegeConstants.EDIT_PATIENTS })
8285
public Patient savePatient(Patient patient) throws APIException;

‎api/src/main/java/org/openmrs/api/impl/PatientServiceImpl.java

+52
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,58 @@ public Patient savePatient(Patient patient) throws APIException {
143143
checkPatientIdentifiers(patient);
144144
}
145145

146+
PatientIdentifier preferredIdentifier = null;
147+
PatientIdentifier possiblePreferredId = patient.getPatientIdentifier();
148+
if (possiblePreferredId != null && possiblePreferredId.isPreferred() && !possiblePreferredId.isVoided()) {
149+
preferredIdentifier = possiblePreferredId;
150+
}
151+
152+
for (PatientIdentifier id : patient.getIdentifiers()) {
153+
if (preferredIdentifier == null && !id.isVoided()) {
154+
id.setPreferred(true);
155+
preferredIdentifier = id;
156+
continue;
157+
}
158+
159+
if (!id.equals(preferredIdentifier))
160+
id.setPreferred(false);
161+
}
162+
163+
PersonName preferredName = null;
164+
PersonName possiblePreferredName = patient.getPersonName();
165+
if (possiblePreferredName != null && possiblePreferredName.isPreferred() && !possiblePreferredName.isVoided()) {
166+
preferredName = possiblePreferredName;
167+
}
168+
169+
for (PersonName name : patient.getNames()) {
170+
if (preferredName == null && !name.isVoided()) {
171+
name.setPreferred(true);
172+
preferredName = name;
173+
continue;
174+
}
175+
176+
if (!name.equals(preferredName))
177+
name.setPreferred(false);
178+
}
179+
180+
PersonAddress preferredAddress = null;
181+
PersonAddress possiblePreferredAddress = patient.getPersonAddress();
182+
if (possiblePreferredAddress != null && possiblePreferredAddress.isPreferred()
183+
&& !possiblePreferredAddress.isVoided()) {
184+
preferredAddress = possiblePreferredAddress;
185+
}
186+
187+
for (PersonAddress address : patient.getAddresses()) {
188+
if (preferredAddress == null && !address.isVoided()) {
189+
address.setPreferred(true);
190+
preferredAddress = address;
191+
continue;
192+
}
193+
194+
if (!address.equals(preferredAddress))
195+
address.setPreferred(false);
196+
}
197+
146198
return dao.savePatient(patient);
147199
}
148200

‎api/src/main/java/org/openmrs/api/impl/PersonServiceImpl.java

+23-8
Original file line numberDiff line numberDiff line change
@@ -420,24 +420,39 @@ public void purgePerson(Person person) throws APIException {
420420
* @see org.openmrs.api.PersonService#savePerson(org.openmrs.Person)
421421
*/
422422
public Person savePerson(Person person) throws APIException {
423-
boolean hasPreferredName = false;
423+
PersonName preferredName = null;
424+
PersonName possiblePreferredName = person.getPersonName();
425+
if (possiblePreferredName != null && possiblePreferredName.isPreferred() && !possiblePreferredName.isVoided()) {
426+
preferredName = possiblePreferredName;
427+
}
428+
424429
for (PersonName name : person.getNames()) {
425-
if (!hasPreferredName && !name.isVoided()) {
430+
if (preferredName == null && !name.isVoided()) {
426431
name.setPreferred(true);
427-
hasPreferredName = true;
432+
preferredName = name;
428433
continue;
429434
}
430-
name.setPreferred(false);
435+
436+
if (!name.equals(preferredName))
437+
name.setPreferred(false);
438+
}
439+
440+
PersonAddress preferredAddress = null;
441+
PersonAddress possiblePreferredAddress = person.getPersonAddress();
442+
if (possiblePreferredAddress != null && possiblePreferredAddress.isPreferred()
443+
&& !possiblePreferredAddress.isVoided()) {
444+
preferredAddress = possiblePreferredAddress;
431445
}
432446

433-
boolean hasPreferredAddress = false;
434447
for (PersonAddress address : person.getAddresses()) {
435-
if (!hasPreferredAddress && !address.isVoided()) {
448+
if (preferredAddress == null && !address.isVoided()) {
436449
address.setPreferred(true);
437-
hasPreferredAddress = true;
450+
preferredAddress = address;
438451
continue;
439452
}
440-
address.setPreferred(false);
453+
454+
if (!address.equals(preferredAddress))
455+
address.setPreferred(false);
441456
}
442457

443458
return dao.savePerson(person);

‎api/src/test/java/org/openmrs/api/PatientServiceTest.java

+104
Original file line numberDiff line numberDiff line change
@@ -3275,4 +3275,108 @@ public void mergePatients_shouldMergePatientNames() throws Exception {
32753275

32763276
}
32773277

3278+
/**
3279+
* @see PatientService#savePatient(Patient)
3280+
* @verifies set the preferred name address and identifier if none is specified
3281+
*/
3282+
@Test
3283+
public void savePatient_shouldSetThePreferredNameAddressAndIdentifierIfNoneIsSpecified() throws Exception {
3284+
Patient patient = new Patient();
3285+
patient.setGender("M");
3286+
PatientIdentifier identifier = new PatientIdentifier("QWERTY", patientService.getPatientIdentifierType(2),
3287+
locationService.getLocation(1));
3288+
patient.addIdentifier(identifier);
3289+
PersonName name = new PersonName("givenName", "middleName", "familyName");
3290+
patient.addName(name);
3291+
PersonAddress address = new PersonAddress();
3292+
address.setAddress1("some address");
3293+
patient.addAddress(address);
3294+
3295+
patientService.savePatient(patient);
3296+
Assert.assertTrue(identifier.isPreferred());
3297+
Assert.assertTrue(name.isPreferred());
3298+
Assert.assertTrue(address.isPreferred());
3299+
}
3300+
3301+
/**
3302+
* @see PatientService#savePatient(Patient)
3303+
* @verifies not set the preferred name address and identifier if they already exist
3304+
*/
3305+
@Test
3306+
public void savePatient_shouldNotSetThePreferredNameAddressAndIdentifierIfTheyAlreadyExist() throws Exception {
3307+
Patient patient = new Patient();
3308+
patient.setGender("M");
3309+
PatientIdentifier identifier = new PatientIdentifier("QWERTY", patientService.getPatientIdentifierType(2),
3310+
locationService.getLocation(1));
3311+
PatientIdentifier preferredIdentifier = new PatientIdentifier("QWERTY2", patientService.getPatientIdentifierType(2),
3312+
locationService.getLocation(1));
3313+
preferredIdentifier.setPreferred(true);
3314+
patient.addIdentifier(identifier);
3315+
patient.addIdentifier(preferredIdentifier);
3316+
3317+
PersonName name = new PersonName("givenName", "middleName", "familyName");
3318+
PersonName preferredName = new PersonName("givenName", "middleName", "familyName");
3319+
preferredName.setPreferred(true);
3320+
patient.addName(name);
3321+
patient.addName(preferredName);
3322+
3323+
PersonAddress address = new PersonAddress();
3324+
address.setAddress1("some address");
3325+
PersonAddress preferredAddress = new PersonAddress();
3326+
preferredAddress.setAddress1("another address");
3327+
preferredAddress.setPreferred(true);
3328+
patient.addAddress(address);
3329+
patient.addAddress(preferredAddress);
3330+
3331+
patientService.savePatient(patient);
3332+
Assert.assertTrue(preferredIdentifier.isPreferred());
3333+
Assert.assertTrue(preferredName.isPreferred());
3334+
Assert.assertTrue(preferredAddress.isPreferred());
3335+
Assert.assertFalse(identifier.isPreferred());
3336+
Assert.assertFalse(name.isPreferred());
3337+
Assert.assertFalse(address.isPreferred());
3338+
}
3339+
3340+
/**
3341+
* @see PatientService#savePatient(Patient)
3342+
* @verifies not set a voided name or address or identifier as preferred
3343+
*/
3344+
@Test
3345+
public void savePatient_shouldNotSetAVoidedNameOrAddressOrIdentifierAsPreferred() throws Exception {
3346+
Patient patient = new Patient();
3347+
patient.setGender("M");
3348+
PatientIdentifier identifier = new PatientIdentifier("QWERTY", patientService.getPatientIdentifierType(2),
3349+
locationService.getLocation(1));
3350+
PatientIdentifier preferredIdentifier = new PatientIdentifier("QWERTY2", patientService.getPatientIdentifierType(2),
3351+
locationService.getLocation(1));
3352+
preferredIdentifier.setPreferred(true);
3353+
preferredIdentifier.setVoided(true);
3354+
patient.addIdentifier(identifier);
3355+
patient.addIdentifier(preferredIdentifier);
3356+
3357+
PersonName name = new PersonName("givenName", "middleName", "familyName");
3358+
PersonName preferredName = new PersonName("givenName", "middleName", "familyName");
3359+
preferredName.setPreferred(true);
3360+
preferredName.setVoided(true);
3361+
patient.addName(name);
3362+
patient.addName(preferredName);
3363+
3364+
PersonAddress address = new PersonAddress();
3365+
address.setAddress1("some address");
3366+
PersonAddress preferredAddress = new PersonAddress();
3367+
preferredAddress.setAddress1("another address");
3368+
preferredAddress.setPreferred(true);
3369+
preferredAddress.setVoided(true);
3370+
patient.addAddress(address);
3371+
patient.addAddress(preferredAddress);
3372+
3373+
patientService.savePatient(patient);
3374+
Assert.assertFalse(preferredIdentifier.isPreferred());
3375+
Assert.assertFalse(preferredName.isPreferred());
3376+
Assert.assertFalse(preferredAddress.isPreferred());
3377+
Assert.assertTrue(identifier.isPreferred());
3378+
Assert.assertTrue(name.isPreferred());
3379+
Assert.assertTrue(address.isPreferred());
3380+
}
3381+
32783382
}

‎api/src/test/java/org/openmrs/api/PersonServiceTest.java

+3-6
Original file line numberDiff line numberDiff line change
@@ -2044,8 +2044,7 @@ public void saveRelationshipType_shouldFailIfTheDescriptionIsNotSpecified() thro
20442044
public void savePerson_shouldSetThePreferredNameAndAddressIfNoneIsSpecified() throws Exception {
20452045
Person person = new Person();
20462046
person.setGender("M");
2047-
Assert.assertNull(person.getId());
2048-
PersonName name = new PersonName("givenName", "middleName", "familyName");
2047+
PersonName name = new PersonName("givenName", "middleName", "familyName");
20492048
person.addName(name);
20502049
PersonAddress address = new PersonAddress();
20512050
address.setAddress1("some address");
@@ -2064,8 +2063,7 @@ public void savePerson_shouldSetThePreferredNameAndAddressIfNoneIsSpecified() th
20642063
public void savePerson_shouldNotSetThePreferredNameAndAddressIfTheyAlreadyExist() throws Exception {
20652064
Person person = new Person();
20662065
person.setGender("M");
2067-
Assert.assertNull(person.getId());
2068-
PersonName name = new PersonName("givenName", "middleName", "familyName");
2066+
PersonName name = new PersonName("givenName", "middleName", "familyName");
20692067
PersonName preferredName = new PersonName("givenName", "middleName", "familyName");
20702068
preferredName.setPreferred(true);
20712069
person.addName(name);
@@ -2094,8 +2092,7 @@ public void savePerson_shouldNotSetThePreferredNameAndAddressIfTheyAlreadyExist(
20942092
public void savePerson_shouldNotSetAVoidedNameOrAddressAsPreferred() throws Exception {
20952093
Person person = new Person();
20962094
person.setGender("M");
2097-
Assert.assertNull(person.getId());
2098-
PersonName name = new PersonName("givenName", "middleName", "familyName");
2095+
PersonName name = new PersonName("givenName", "middleName", "familyName");
20992096
PersonName preferredName = new PersonName("givenName", "middleName", "familyName");
21002097
preferredName.setPreferred(true);
21012098
preferredName.setVoided(true);

0 commit comments

Comments
 (0)
Please sign in to comment.