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