From 7bb54b02bf1a581ad6eff6b22cc0452077897291 Mon Sep 17 00:00:00 2001 From: Arjun-Go Date: Tue, 18 Jun 2024 18:11:00 +0530 Subject: [PATCH] update. sort logic for numeric bed numbers --- .../ipd/service/impl/IPDWardServiceImpl.java | 43 +++++++++---------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/omod/src/main/java/org/openmrs/module/ipd/service/impl/IPDWardServiceImpl.java b/omod/src/main/java/org/openmrs/module/ipd/service/impl/IPDWardServiceImpl.java index bef0c05..e09998e 100644 --- a/omod/src/main/java/org/openmrs/module/ipd/service/impl/IPDWardServiceImpl.java +++ b/omod/src/main/java/org/openmrs/module/ipd/service/impl/IPDWardServiceImpl.java @@ -10,8 +10,8 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; -import java.util.Collections; import java.util.List; +import java.util.Objects; import java.util.regex.Pattern; @Service @@ -40,11 +40,12 @@ public IPDPatientDetails getIPDPatientByWard(String wardUuid, Integer offset, In if (admittedPatients ==null ){ return new IPDPatientDetails(new ArrayList<>(),0); } + List admittedPatientsSortedList = Objects.equals(sortBy, "bedNumber") ? sortNumericBedNumbers(admittedPatients) : admittedPatients; - offset = Math.min(offset, admittedPatients.size()); - limit = Math.min(limit, admittedPatients.size() - offset); + offset = Math.min(offset, admittedPatientsSortedList.size()); + limit = Math.min(limit, admittedPatientsSortedList.size() - offset); - return new IPDPatientDetails(admittedPatients.subList(offset, offset + limit), admittedPatients.size()); + return new IPDPatientDetails(admittedPatientsSortedList.subList(offset, offset + limit), admittedPatientsSortedList.size()); } @Override @@ -55,12 +56,12 @@ public IPDPatientDetails getIPDPatientsByWardAndProvider(String wardUuid, String if (admittedPatients ==null ){ return new IPDPatientDetails(new ArrayList<>(),0); } - List admittedPatientsSortedList = sortBedNumbers(admittedPatients); + List admittedPatientsSortedList = Objects.equals(sortBy, "bedNumber") ? sortNumericBedNumbers(admittedPatients) : admittedPatients; offset = Math.min(offset, admittedPatientsSortedList.size()); limit = Math.min(limit, admittedPatientsSortedList.size() - offset); - return new IPDPatientDetails(admittedPatientsSortedList.subList(offset, offset + limit), admittedPatients.size()); + return new IPDPatientDetails(admittedPatientsSortedList.subList(offset, offset + limit), admittedPatientsSortedList.size()); } @Override @@ -73,32 +74,28 @@ public IPDPatientDetails searchIPDPatientsInWard(String wardUuid, List s return new IPDPatientDetails(new ArrayList<>(),0); } - List admittedPatientsSortedList = sortBedNumbers(admittedPatients); + List admittedPatientsSortedList = Objects.equals(sortBy, "bedNumber") ? sortNumericBedNumbers(admittedPatients) : admittedPatients; offset = Math.min(offset, admittedPatientsSortedList.size()); limit = Math.min(limit, admittedPatientsSortedList.size() - offset); - return new IPDPatientDetails(admittedPatientsSortedList.subList(offset, offset + limit), admittedPatients.size()); + return new IPDPatientDetails(admittedPatientsSortedList.subList(offset, offset + limit), admittedPatientsSortedList.size()); } - private List sortBedNumbers(List admittedPatients) { - Collections.sort(admittedPatients, (patientA, patientB) -> { - String bedNumberA = patientA.getBedPatientAssignment().getBed().getBedNumber(); - String bedNumberB = patientB.getBedPatientAssignment().getBed().getBedNumber(); + private List sortNumericBedNumbers(List admittedPatients) { - boolean isNumericA = numericPattern.matcher(bedNumberA).matches(); - boolean isNumericB = numericPattern.matcher(bedNumberB).matches(); + boolean allNumeric = admittedPatients.stream() + .map(patient -> patient.getBedPatientAssignment().getBed().getBedNumber()) + .allMatch(bedNumber -> numericPattern.matcher(bedNumber).matches()); - if (isNumericA && isNumericB) { - return Integer.compare(Integer.parseInt(bedNumberA), Integer.parseInt(bedNumberB)); - } else if (!isNumericA && !isNumericB) { - return bedNumberA.compareTo(bedNumberB); - } else { - return isNumericA ? -1 : 1; - } - }); + if(allNumeric) { + admittedPatients.sort((patientA, patientB) -> { + String bedNumberA = patientA.getBedPatientAssignment().getBed().getBedNumber(); + String bedNumberB = patientB.getBedPatientAssignment().getBed().getBedNumber(); + return Integer.compare(Integer.parseInt(bedNumberA), Integer.parseInt(bedNumberB)); + }); + } return admittedPatients; - } }