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; } + }