diff --git a/api/pom.xml b/api/pom.xml
index 8aba752e..1bc7117c 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -3,7 +3,7 @@
org.openmrs.module
queue
- 3.0.0-SNAPSHOT
+ 2.7.2-lafia
queue-api
@@ -16,6 +16,11 @@
org.openmrs.api
openmrs-api
+
+ org.projectlombok
+ lombok
+ provided
+
diff --git a/api/src/main/java/org/openmrs/module/queue/model/Queue.java b/api/src/main/java/org/openmrs/module/queue/model/Queue.java
index 6dcc0631..32f98de7 100644
--- a/api/src/main/java/org/openmrs/module/queue/model/Queue.java
+++ b/api/src/main/java/org/openmrs/module/queue/model/Queue.java
@@ -45,7 +45,7 @@ public class Queue extends BaseChangeableOpenmrsMetadata {
private static final long serialVersionUID = 1L;
@Id
- @GeneratedValue(strategy = GenerationType.AUTO)
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "queue_id")
private Integer queueId;
diff --git a/api/src/main/java/org/openmrs/module/queue/model/QueueEntry.java b/api/src/main/java/org/openmrs/module/queue/model/QueueEntry.java
index a2ab33be..64a8264d 100644
--- a/api/src/main/java/org/openmrs/module/queue/model/QueueEntry.java
+++ b/api/src/main/java/org/openmrs/module/queue/model/QueueEntry.java
@@ -45,7 +45,7 @@ public class QueueEntry extends BaseChangeableOpenmrsData {
private static final long serialVersionUID = 1L;
@Id
- @GeneratedValue(strategy = GenerationType.AUTO)
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "queue_entry_id")
private Integer queueEntryId;
diff --git a/api/src/main/java/org/openmrs/module/queue/model/QueueRoom.java b/api/src/main/java/org/openmrs/module/queue/model/QueueRoom.java
index 8a837de4..95bd2de3 100644
--- a/api/src/main/java/org/openmrs/module/queue/model/QueueRoom.java
+++ b/api/src/main/java/org/openmrs/module/queue/model/QueueRoom.java
@@ -35,7 +35,7 @@ public class QueueRoom extends BaseChangeableOpenmrsMetadata {
private static final long serialVersionUID = 1L;
@Id
- @GeneratedValue(strategy = GenerationType.AUTO)
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "queue_room_id")
private Integer queueRoom;
diff --git a/api/src/main/java/org/openmrs/module/queue/model/RoomProviderMap.java b/api/src/main/java/org/openmrs/module/queue/model/RoomProviderMap.java
index f6f65c1f..79782672 100644
--- a/api/src/main/java/org/openmrs/module/queue/model/RoomProviderMap.java
+++ b/api/src/main/java/org/openmrs/module/queue/model/RoomProviderMap.java
@@ -36,7 +36,7 @@ public class RoomProviderMap extends BaseOpenmrsData {
private static final long serialVersionUID = 1L;
@Id
- @GeneratedValue(strategy = GenerationType.AUTO)
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "room_provider_map_id")
private Integer roomProviderMapId;
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index 997ec548..f7747c6f 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -3,7 +3,7 @@
org.openmrs.module
queue
- 3.0.0-SNAPSHOT
+ 2.7.0-lafia
queue-integration-tests
diff --git a/omod/pom.xml b/omod/pom.xml
index e6202907..d5f8a2a5 100644
--- a/omod/pom.xml
+++ b/omod/pom.xml
@@ -3,7 +3,7 @@
org.openmrs.module
queue
- 3.0.0-SNAPSHOT
+ 2.7.2-lafia
queue-omod
@@ -17,6 +17,11 @@
queue-api
${project.parent.version}
+
+ org.projectlombok
+ lombok
+ provided
+
org.openmrs.web
openmrs-web
diff --git a/omod/src/main/java/org/openmrs/module/queue/web/Legacy1xRestController.java b/omod/src/main/java/org/openmrs/module/queue/web/Legacy1xRestController.java
index ca26b45b..baf9b02c 100644
--- a/omod/src/main/java/org/openmrs/module/queue/web/Legacy1xRestController.java
+++ b/omod/src/main/java/org/openmrs/module/queue/web/Legacy1xRestController.java
@@ -136,14 +136,42 @@ public Object postVisitQueueEntry(HttpServletRequest request, HttpServletRespons
RequestContext requestContext = RestUtil.getRequestContext(request, response);
SimpleObject queueEntry = new SimpleObject();
Map postedQueueEntry = post.get("queueEntry");
- for (String key : postedQueueEntry.keySet()) {
- queueEntry.add(key, postedQueueEntry.get(key));
+ if (postedQueueEntry != null) {
+ for (String key : postedQueueEntry.keySet()) {
+ Object value = postedQueueEntry.get(key);
+ // Handle complex objects by extracting UUID if present
+ Object extractedValue = extractUuidFromComplexObject(value);
+ queueEntry.add(key, extractedValue);
+ log.debug("Extracted {}: {} -> {}", key, value, extractedValue);
+ }
+ } else {
+ log.warn("postedQueueEntry is null in postVisitQueueEntry");
+ }
+ // Extract UUID from visit object if it's a complex object
+ Object visit = extractUuidFromComplexObject(post.get("visit"));
+ if (visit != null) {
+ queueEntry.add("visit", visit);
}
- queueEntry.add("visit", post.get("visit"));
+ log.debug("Final queueEntry SimpleObject: {}", queueEntry);
Object created = queueEntryResource.create(queueEntry, requestContext);
return RestUtil.created(response, created);
}
+ /**
+ * Extracts UUID from complex objects that have a uuid field This handles cases where the frontend
+ * sends complex objects like: {"uuid": "some-uuid", "display": "some-display"} instead of just
+ * "some-uuid"
+ */
+ private Object extractUuidFromComplexObject(Object value) {
+ if (value instanceof Map) {
+ Map map = (Map) value;
+ if (map.containsKey("uuid")) {
+ return map.get("uuid");
+ }
+ }
+ return value;
+ }
+
@RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/queueroom", method = GET)
@ResponseBody
public Object getQueueRooms(HttpServletRequest request, HttpServletResponse response) {
@@ -163,7 +191,14 @@ public Object getRoomProviderMaps(HttpServletRequest request, HttpServletRespons
public Object postRoomProviderMap(HttpServletRequest request, HttpServletResponse response,
@RequestBody SimpleObject post) {
RequestContext requestContext = RestUtil.getRequestContext(request, response);
- Object created = roomProviderMapResource.create(post, requestContext);
+ // Handle complex objects by extracting UUID if present
+ SimpleObject processedPost = new SimpleObject();
+ for (String key : post.keySet()) {
+ Object value = post.get(key);
+ value = extractUuidFromComplexObject(value);
+ processedPost.add(key, value);
+ }
+ Object created = roomProviderMapResource.create(processedPost, requestContext);
return RestUtil.created(response, created);
}
@@ -175,7 +210,14 @@ public Object updateRoomProviderMap(@PathVariable("uuid") String uuid, @RequestB
if (post.get("deleted") != null && "false".equals(post.get("deleted")) && post.size() == 1) {
return RestUtil.updated(response, roomProviderMapResource.undelete(uuid, context));
}
- return RestUtil.updated(response, roomProviderMapResource.update(uuid, post, context));
+ // Handle complex objects by extracting UUID if present
+ SimpleObject processedPost = new SimpleObject();
+ for (String key : post.keySet()) {
+ Object value = post.get(key);
+ value = extractUuidFromComplexObject(value);
+ processedPost.add(key, value);
+ }
+ return RestUtil.updated(response, roomProviderMapResource.update(uuid, processedPost, context));
}
@RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/queue-entry-metrics", method = { GET, POST })
diff --git a/omod/src/main/java/org/openmrs/module/queue/web/resources/QueueEntryResource.java b/omod/src/main/java/org/openmrs/module/queue/web/resources/QueueEntryResource.java
index 8f63592b..d600e668 100644
--- a/omod/src/main/java/org/openmrs/module/queue/web/resources/QueueEntryResource.java
+++ b/omod/src/main/java/org/openmrs/module/queue/web/resources/QueueEntryResource.java
@@ -25,6 +25,7 @@
import io.swagger.models.properties.StringProperty;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
+import org.openmrs.Concept;
import org.openmrs.PersonName;
import org.openmrs.api.context.Context;
import org.openmrs.module.queue.api.QueueServicesWrapper;
@@ -94,6 +95,47 @@ public QueueEntry save(QueueEntry queueEntry) {
return getServices().getQueueEntryService().saveQueueEntry(queueEntry);
}
+ @Override
+ public void setProperty(Object instance, String propertyName, Object propertyValue) throws ResponseException {
+ QueueEntry queueEntry = (QueueEntry) instance;
+ // Manually handle status and priority conversion from UUID strings to Concept objects
+ if ("status".equals(propertyName) && propertyValue instanceof String) {
+ String statusUuid = (String) propertyValue;
+ Concept status = null;
+ try {
+ status = getServices().getConcept(statusUuid);
+ }
+ catch (IllegalArgumentException e) {
+ log.warn("Status concept not found: {}, attempting to use default 'In Service' UUID", statusUuid);
+ // Fallback to "In Service" UUID if the provided UUID doesn't exist
+ String inServiceUuid = "ca7494ae-437f-4fd0-8aae-b88b9a2ba47d";
+ try {
+ status = getServices().getConcept(inServiceUuid);
+ log.info("Using default 'In Service' status concept: {}", inServiceUuid);
+ }
+ catch (IllegalArgumentException fallbackException) {
+ throw new ObjectNotFoundException("Status concept not found: " + statusUuid
+ + " and fallback 'In Service' concept also not found: " + inServiceUuid);
+ }
+ }
+ if (status != null) {
+ queueEntry.setStatus(status);
+ }
+ } else if ("priority".equals(propertyName) && propertyValue instanceof String) {
+ String priorityUuid = (String) propertyValue;
+ try {
+ Concept priority = getServices().getConcept(priorityUuid);
+ queueEntry.setPriority(priority);
+ }
+ catch (IllegalArgumentException e) {
+ throw new ObjectNotFoundException("Priority concept not found: " + priorityUuid);
+ }
+ } else {
+ // For all other properties, use the default behavior
+ super.setProperty(instance, propertyName, propertyValue);
+ }
+ }
+
@Override
public void purge(QueueEntry queueEntry, RequestContext requestContext) throws ResponseException {
getServices().getQueueEntryService().purgeQueueEntry(queueEntry);
diff --git a/pom.xml b/pom.xml
index dd56c7a6..e4cb2e7c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
org.openmrs.module
queue
- 3.0.0-SNAPSHOT
+ 2.7.2-lafia
pom
Queue
Patient Queues
@@ -188,6 +188,15 @@
org.apache.maven.plugins
maven-compiler-plugin
3.8.1
+
+
+
+ org.projectlombok
+ lombok
+ ${lombokVersion}
+
+
+
org.apache.maven.plugins
@@ -329,11 +338,10 @@
1.8
UTF-8
UTF-8
- 1.18.38
- 3.0.0-SNAPSHOT
- 1.17.7
- 4.8.0
- 2.7.4
- 2.7.4
+ 1.18.34
+ 2.0.9
+ 2.32.0
+ 2.3.4
+ 2.4.0