diff --git a/omod/src/main/java/org/openmrs/module/ipd/service/impl/IPDVisitServiceImpl.java b/omod/src/main/java/org/openmrs/module/ipd/service/impl/IPDVisitServiceImpl.java index d765303..e14f1ec 100644 --- a/omod/src/main/java/org/openmrs/module/ipd/service/impl/IPDVisitServiceImpl.java +++ b/omod/src/main/java/org/openmrs/module/ipd/service/impl/IPDVisitServiceImpl.java @@ -105,9 +105,14 @@ private Map getDrugOrderScheduleForOrders(String pati .map(BahmniDrugOrder::getUuid) .collect(Collectors.toList()); List slots = ipdScheduleService.getMedicationSlots(patientUuid, ServiceType.MEDICATION_REQUEST,orderUuids); + List prnSlots = ipdScheduleService.getMedicationSlots(patientUuid, ServiceType.AS_NEEDED_MEDICATION_REQUEST,orderUuids); + slots.addAll(prnSlots); Map> groupedByOrders = slots.stream() .collect(Collectors.groupingBy(slot -> (DrugOrder) slot.getOrder())); + Map drugOrderScheduleByOrders = slotTimeCreationService.getDrugOrderScheduledTime(groupedByOrders); + + return drugOrderScheduleByOrders; } diff --git a/omod/src/main/java/org/openmrs/module/ipd/service/impl/SlotTimeCreationService.java b/omod/src/main/java/org/openmrs/module/ipd/service/impl/SlotTimeCreationService.java index 56e66da..074bf79 100644 --- a/omod/src/main/java/org/openmrs/module/ipd/service/impl/SlotTimeCreationService.java +++ b/omod/src/main/java/org/openmrs/module/ipd/service/impl/SlotTimeCreationService.java @@ -104,33 +104,37 @@ private List getSlotsStartTimeWithStartTimeDurationFrequency(Sche public HashMap getDrugOrderScheduledTime(Map> slotsByOrder){ HashMap drugOrderScheduleHash= new HashMap<>(); for (DrugOrder drugOrder : slotsByOrder.keySet()) { - Double frequencyPerDay = drugOrder.getFrequency().getFrequencyPerDay(); - String frequency=drugOrder.getFrequency().getName(); - Map> groupedByDateAndEpoch = slotsByOrder.get(drugOrder).stream() - .collect(Collectors.groupingBy( - obj -> obj.getStartDateTime().toLocalDate(), - Collectors.mapping( - obj -> obj.getStartDateTime(), - Collectors.toList() - ) - )); - - List> sortedList = groupedByDateAndEpoch.entrySet().stream() - .sorted(Map.Entry.comparingByKey()) // Sort by LocalDate in ascending order - .map(Map.Entry::getValue) // Get the list of Longs for each entry - .collect(Collectors.toList()); // Collect the list of lists into a single ArrayList - - DrugOrderSchedule drugOrderSchedule=new DrugOrderSchedule(); - if (START_TIME_FREQUENCIES.contains(frequency)){ - drugOrderSchedule.setSlotStartTime(DateTimeUtil.convertLocalDateTimeToUTCEpoc(sortedList.get(0).get(0))); + DrugOrderSchedule drugOrderSchedule = new DrugOrderSchedule(); + if (drugOrder.getAsNeeded()){ + drugOrderSchedule.setSlotStartTime(DateTimeUtil.convertLocalDateTimeToUTCEpoc(slotsByOrder.get(drugOrder).get(0).getStartDateTime())); } - else if (sortedList.get(0).size() == frequencyPerDay || (sortedList.size() == 1)) { - drugOrderSchedule.setDayWiseSlotsStartTime(sortedList.get(0).stream().map(DateTimeUtil::convertLocalDateTimeToUTCEpoc).collect(Collectors.toList())); - } else { - drugOrderSchedule.setFirstDaySlotsStartTime(sortedList.get(0).stream().map(DateTimeUtil::convertLocalDateTimeToUTCEpoc).collect(Collectors.toList())); - drugOrderSchedule.setRemainingDaySlotsStartTime(sortedList.get(sortedList.size() - 1).stream().map(DateTimeUtil::convertLocalDateTimeToUTCEpoc).collect(Collectors.toList())); - if (sortedList.size() > 2) { - drugOrderSchedule.setDayWiseSlotsStartTime(sortedList.get(1).stream().map(DateTimeUtil::convertLocalDateTimeToUTCEpoc).collect(Collectors.toList())); + else { + Double frequencyPerDay = drugOrder.getFrequency().getFrequencyPerDay(); + String frequency = drugOrder.getFrequency().getName(); + Map> groupedByDateAndEpoch = slotsByOrder.get(drugOrder).stream() + .collect(Collectors.groupingBy( + obj -> obj.getStartDateTime().toLocalDate(), + Collectors.mapping( + obj -> obj.getStartDateTime(), + Collectors.toList() + ) + )); + + List> sortedList = groupedByDateAndEpoch.entrySet().stream() + .sorted(Map.Entry.comparingByKey()) // Sort by LocalDate in ascending order + .map(Map.Entry::getValue) // Get the list of Longs for each entry + .collect(Collectors.toList()); // Collect the list of lists into a single ArrayList + + if (START_TIME_FREQUENCIES.contains(frequency)) { + drugOrderSchedule.setSlotStartTime(DateTimeUtil.convertLocalDateTimeToUTCEpoc(sortedList.get(0).get(0))); + } else if (sortedList.get(0).size() == frequencyPerDay || (sortedList.size() == 1)) { + drugOrderSchedule.setDayWiseSlotsStartTime(sortedList.get(0).stream().map(DateTimeUtil::convertLocalDateTimeToUTCEpoc).collect(Collectors.toList())); + } else { + drugOrderSchedule.setFirstDaySlotsStartTime(sortedList.get(0).stream().map(DateTimeUtil::convertLocalDateTimeToUTCEpoc).collect(Collectors.toList())); + drugOrderSchedule.setRemainingDaySlotsStartTime(sortedList.get(sortedList.size() - 1).stream().map(DateTimeUtil::convertLocalDateTimeToUTCEpoc).collect(Collectors.toList())); + if (sortedList.size() > 2) { + drugOrderSchedule.setDayWiseSlotsStartTime(sortedList.get(1).stream().map(DateTimeUtil::convertLocalDateTimeToUTCEpoc).collect(Collectors.toList())); + } } } drugOrderSchedule.setSlots(slotsByOrder.get(drugOrder));