Skip to content

Commit 40678a7

Browse files
authored
(fix) O3-4416 void queue entries when corresponding visit voids (#80)
* (fix) O3-4416 void queue entries when corresponding visit voids * address PR feedback
1 parent 6c9d5cc commit 40678a7

2 files changed

Lines changed: 48 additions & 1 deletion

File tree

api/src/main/java/org/openmrs/module/queue/api/VisitWithQueueEntriesSaveHandler.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,14 @@
1818
import org.openmrs.Visit;
1919
import org.openmrs.annotation.Handler;
2020
import org.openmrs.api.handler.SaveHandler;
21+
import org.openmrs.api.handler.VoidHandler;
2122
import org.openmrs.module.queue.api.search.QueueEntrySearchCriteria;
2223
import org.openmrs.module.queue.model.QueueEntry;
2324
import org.springframework.beans.factory.annotation.Autowired;
2425
import org.springframework.beans.factory.annotation.Qualifier;
2526

2627
@Handler(supports = Visit.class)
27-
public class VisitWithQueueEntriesSaveHandler implements SaveHandler<Visit> {
28+
public class VisitWithQueueEntriesSaveHandler implements SaveHandler<Visit>, VoidHandler<Visit> {
2829

2930
private final Log log = LogFactory.getLog(getClass());
3031

@@ -51,5 +52,20 @@ public void handle(Visit visit, User user, Date date, String s) {
5152
log.trace("Closed queue entry " + qe + " on " + visit.getStopDatetime());
5253
}
5354
}
55+
if (visit.getVisitId() != null && visit.getVoided()) {
56+
QueueEntrySearchCriteria criteria = new QueueEntrySearchCriteria();
57+
criteria.setVisit(visit);
58+
List<QueueEntry> queueEntries = queueEntryService.getQueueEntries(criteria);
59+
for (QueueEntry qe : queueEntries) {
60+
if (!qe.getVoided()) {
61+
qe.setVoided(true);
62+
qe.setVoidReason(visit.getVoidReason());
63+
qe.setVoidedBy(visit.getVoidedBy());
64+
qe.setDateVoided(visit.getDateVoided());
65+
queueEntryService.saveQueueEntry(qe);
66+
}
67+
log.trace("Voided queue entry " + qe + " on " + date);
68+
}
69+
}
5470
}
5571
}

integration-tests/src/test/java/org/openmrs/module/queue/api/VisitWithQueueEntriesSaveHandlerTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,11 @@
1010
package org.openmrs.module.queue.api;
1111

1212
import static org.hamcrest.Matchers.equalTo;
13+
import static org.junit.Assert.assertFalse;
14+
import static org.junit.Assert.assertNotNull;
1315
import static org.junit.Assert.assertNull;
1416
import static org.junit.Assert.assertThat;
17+
import static org.junit.Assert.assertTrue;
1518

1619
import java.util.Arrays;
1720
import java.util.Date;
@@ -83,4 +86,32 @@ public void shouldEndQueueEntriesIfVisitIsStopped() {
8386
assertThat(queueEntry.getEndedAt(), equalTo(stopDate));
8487
}
8588

89+
@Test
90+
public void shouldNotVoidQueueEntriesIfVisitIsNotVoided() {
91+
assertFalse(visit.getVoided());
92+
assertFalse(queueEntry.getVoided());
93+
visit = visitService.saveVisit(visit);
94+
queueEntry = queueEntryService.getQueueEntryById(queueEntry.getId()).get();
95+
assertFalse(visit.getVoided());
96+
assertFalse(queueEntry.getVoided());
97+
}
98+
99+
@Test
100+
public void shouldVoidQueueEntriesIfVisitIsVoided() {
101+
assertFalse(visit.getVoided());
102+
assertFalse(queueEntry.getVoided());
103+
visit.setVoided(true);
104+
String voidReason = "for testing";
105+
visit.setVoidReason(voidReason);
106+
visit = visitService.saveVisit(visit);
107+
queueEntry = queueEntryService.getQueueEntryById(queueEntry.getId()).get();
108+
assertTrue(visit.getVoided());
109+
assertThat(visit.getVoidReason(), equalTo(voidReason));
110+
assertNotNull(visit.getDateVoided());
111+
assertNotNull(visit.getVoidedBy());
112+
assertTrue(queueEntry.getVoided());
113+
assertThat(queueEntry.getVoidReason(), equalTo(voidReason));
114+
assertThat(queueEntry.getDateVoided(), equalTo(visit.getDateVoided()));
115+
assertThat(queueEntry.getVoidedBy(), equalTo(visit.getVoidedBy()));
116+
}
86117
}

0 commit comments

Comments
 (0)