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..0ff3dc63 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
@@ -63,7 +63,7 @@ public class QueueEntry extends BaseChangeableOpenmrsData {
private Visit visit;
@ManyToOne
- @JoinColumn(name = "priority", referencedColumnName = "concept_id", nullable = false)
+ @JoinColumn(name = "priority", referencedColumnName = "concept_id", nullable = true)
private Concept priority;
@Column(name = "priority_comment")
diff --git a/api/src/main/java/org/openmrs/module/queue/validators/QueueEntryValidator.java b/api/src/main/java/org/openmrs/module/queue/validators/QueueEntryValidator.java
index 9e68d972..ab1001c3 100644
--- a/api/src/main/java/org/openmrs/module/queue/validators/QueueEntryValidator.java
+++ b/api/src/main/java/org/openmrs/module/queue/validators/QueueEntryValidator.java
@@ -73,9 +73,7 @@ public void validate(Object target, Errors errors) {
"The property status should be a member of configured queue status conceptSet.");
}
}
- if (queueEntry.getPriority() == null) {
- errors.rejectValue("priority", "queueEntry.priority.null", "The property priority should not be null");
- } else {
+ if (queueEntry.getPriority() != null) {
if (!queueServices.getAllowedPriorities(queue).contains(queueEntry.getPriority())) {
errors.rejectValue("priority", "queueEntry.priority.invalid",
"The property priority should be a member of configured queue priority conceptSet.");
diff --git a/api/src/main/resources/liquibase.xml b/api/src/main/resources/liquibase.xml
index 3ad8dba8..19fe4abd 100644
--- a/api/src/main/resources/liquibase.xml
+++ b/api/src/main/resources/liquibase.xml
@@ -747,4 +747,15 @@
+
+
+
+
+
+
+
+
+
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..9d914e37 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
@@ -137,7 +137,25 @@ public Object postVisitQueueEntry(HttpServletRequest request, HttpServletRespons
SimpleObject queueEntry = new SimpleObject();
Map postedQueueEntry = post.get("queueEntry");
for (String key : postedQueueEntry.keySet()) {
- queueEntry.add(key, postedQueueEntry.get(key));
+ Object value = postedQueueEntry.get(key);
+ //queueEntry.add(key, postedQueueEntry.get(key));
+ if ("priority".equals(key)) {
+ if (value instanceof Map) {
+ Map, ?> priorityMap = (Map, ?>) value;
+ Object uuid = priorityMap.get("uuid");
+
+ // If uuid is empty or null, don't add priority (it will be null)
+ if (uuid != null && uuid instanceof String && !((String) uuid).trim().isEmpty()) {
+ queueEntry.add(key, uuid); // Add just the UUID string
+ }
+ // Otherwise skip adding priority, leaving it null
+ } else if (value instanceof String && !((String) value).trim().isEmpty()) {
+ queueEntry.add(key, value);
+ }
+ // Skip if empty string or null
+ } else {
+ queueEntry.add(key, value);
+ }
}
queueEntry.add("visit", post.get("visit"));
Object created = queueEntryResource.create(queueEntry, requestContext);
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..a9899eb6 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;
@@ -34,6 +35,7 @@
import org.openmrs.module.webservices.rest.web.RequestContext;
import org.openmrs.module.webservices.rest.web.RestConstants;
import org.openmrs.module.webservices.rest.web.annotation.PropertyGetter;
+import org.openmrs.module.webservices.rest.web.annotation.PropertySetter;
import org.openmrs.module.webservices.rest.web.annotation.Resource;
import org.openmrs.module.webservices.rest.web.representation.CustomRepresentation;
import org.openmrs.module.webservices.rest.web.representation.DefaultRepresentation;
@@ -243,7 +245,8 @@ public DelegatingResourceDescription getRepresentationDescription(Representation
description.addProperty("queueComingFrom", Representation.DEFAULT);
description.addProperty("providerWaitingFor", Representation.DEFAULT);
- // gets the previous queue entry, but with REF representation so it doesn't recursively
+ // gets the previous queue entry, but with REF representation so it doesn't
+ // recursively
// fetch more previous entries.
description.addProperty("previousQueueEntry", Representation.REF);
@@ -290,6 +293,47 @@ public QueueEntry getPreviousQueueEntry(QueueEntry queueEntry) {
return getServices().getQueueEntryService().getPreviousQueueEntry(queueEntry);
}
+ @PropertySetter("priority")
+ public static void setPriority(QueueEntry instance, Object value) {
+ if (value == null) {
+ instance.setPriority(null);
+ return;
+ }
+
+ // Handle object with uuid property
+ if (value instanceof Map) {
+ Map, ?> map = (Map, ?>) value;
+ Object uuidValue = map.get("uuid");
+
+ if (uuidValue == null || (uuidValue instanceof String && ((String) uuidValue).trim().isEmpty())) {
+ instance.setPriority(null);
+ return;
+ }
+
+ if (uuidValue instanceof String) {
+ String uuid = ((String) uuidValue).trim();
+ Concept concept = Context.getConceptService().getConceptByUuid(uuid);
+ if (concept != null) {
+ instance.setPriority(concept);
+ }
+ }
+ return;
+ }
+
+ // Handle direct string UUID
+ if (value instanceof String) {
+ String uuid = ((String) value).trim();
+ if (!uuid.isEmpty()) {
+ Concept concept = Context.getConceptService().getConceptByUuid(uuid);
+ if (concept != null) {
+ instance.setPriority(concept);
+ }
+ } else {
+ instance.setPriority(null);
+ }
+ }
+ }
+
@Override
public String getResourceVersion() {
return "2.3";
@@ -308,4 +352,5 @@ public QueueEntrySearchCriteriaParser getSearchCriteriaParser() {
}
return searchCriteriaParser;
}
+
}
diff --git a/omod/src/main/java/org/openmrs/module/queue/web/resources/QueueEntrySubResource.java b/omod/src/main/java/org/openmrs/module/queue/web/resources/QueueEntrySubResource.java
index b101e5a4..f4996bb0 100644
--- a/omod/src/main/java/org/openmrs/module/queue/web/resources/QueueEntrySubResource.java
+++ b/omod/src/main/java/org/openmrs/module/queue/web/resources/QueueEntrySubResource.java
@@ -14,12 +14,14 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.Map;
import java.util.Optional;
import io.swagger.models.Model;
import io.swagger.models.ModelImpl;
import io.swagger.models.properties.*;
import lombok.Setter;
+import org.openmrs.Concept;
import org.openmrs.api.context.Context;
import org.openmrs.module.queue.api.QueueServicesWrapper;
import org.openmrs.module.queue.api.search.QueueEntrySearchCriteria;
@@ -28,6 +30,7 @@
import org.openmrs.module.webservices.rest.web.RequestContext;
import org.openmrs.module.webservices.rest.web.RestConstants;
import org.openmrs.module.webservices.rest.web.annotation.PropertyGetter;
+import org.openmrs.module.webservices.rest.web.annotation.PropertySetter;
import org.openmrs.module.webservices.rest.web.annotation.SubResource;
import org.openmrs.module.webservices.rest.web.representation.CustomRepresentation;
import org.openmrs.module.webservices.rest.web.representation.DefaultRepresentation;
@@ -183,7 +186,7 @@ public DelegatingResourceDescription getRepresentationDescription(Representation
resourceDescription.addProperty("queueComingFrom", Representation.FULL);
resourceDescription.addProperty("providerWaitingFor", Representation.FULL);
} else if (representation instanceof CustomRepresentation) {
- //Let the user decide
+ // Let the user decide
resourceDescription = null;
}
return resourceDescription;
@@ -231,13 +234,53 @@ public Model getGETModel(Representation rep) {
@PropertyGetter("display")
public String getDisplay(QueueEntry queueEntry) {
- //Display patient name
+ // Display patient name
if (queueEntry.getPatient().getPerson().getPersonName() == null) {
return "";
}
return queueEntry.getPatient().getPerson().getPersonName().getFullName();
}
+ @PropertySetter("priority")
+ public static void setPriority(QueueEntry instance, Object value) {
+ if (value == null) {
+ instance.setPriority(null);
+ return;
+ }
+
+ // Handle object with uuid property
+ if (value instanceof Map) {
+ Map, ?> map = (Map, ?>) value;
+ Object uuidValue = map.get("uuid");
+
+ if (uuidValue == null || (uuidValue instanceof String && ((String) uuidValue).trim().isEmpty())) {
+ instance.setPriority(null);
+ return;
+ }
+
+ if (uuidValue instanceof String) {
+ String uuid = ((String) uuidValue).trim();
+ Concept concept = Context.getConceptService().getConceptByUuid(uuid);
+ if (concept != null) {
+ instance.setPriority(concept);
+ }
+ }
+ return;
+ }
+
+ if (value instanceof String) {
+ String uuid = ((String) value).trim();
+ if (!uuid.isEmpty()) {
+ Concept concept = Context.getConceptService().getConceptByUuid(uuid);
+ if (concept != null) {
+ instance.setPriority(concept);
+ }
+ } else {
+ instance.setPriority(null);
+ }
+ }
+ }
+
@Override
public String getResourceVersion() {
return "2.3";
@@ -249,4 +292,5 @@ public QueueServicesWrapper getServices() {
}
return services;
}
+
}