Skip to content

Commit

Permalink
Fix to convert time to UTC intead of Local Time
Browse files Browse the repository at this point in the history
  • Loading branch information
kalai-tw committed Jan 4, 2024
1 parent 8df08c5 commit 1b6c4b5
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public Slot saveSlot(Slot slot) throws DAOException {
@Override
public List<Slot> getSlotsBySubjectReferenceIdAndForDateAndServiceType(Reference subject, LocalDate forDate, Concept serviceType) {
Query query = sessionFactory.getCurrentSession()
.createQuery("FROM Slot slot WHERE slot.schedule.subject=:subject and YEAR(slot.startDateTime)=:forYear and MONTH(slot.startDateTime)=:forMonth and DAY(slot.startDateTime)=:forDay and slot.serviceType=:serviceType");
.createQuery("FROM Slot slot WHERE slot.schedule.subject=:subject and YEAR(slot.startDateTime)=:forYear and MONTH(slot.startDateTime)=:forMonth and DAY(slot.startDateTime)=:forDay and slot.serviceType=:serviceType and slot.voided=0");

query.setParameter("subject", subject);
query.setParameter("forYear", forDate.getYear());
Expand All @@ -61,7 +61,7 @@ public List<Slot> getSlotsBySubjectReferenceIdAndForDateAndServiceType(Reference
@Override
public List<Slot> getSlotsBySubjectReferenceIdAndServiceType(Reference subject, Concept serviceType) {
Query query = sessionFactory.getCurrentSession()
.createQuery("FROM Slot slot WHERE slot.schedule.subject=:subject and slot.serviceType=:serviceType");
.createQuery("FROM Slot slot WHERE slot.schedule.subject=:subject and slot.serviceType=:serviceType and slot.voided=0");

query.setParameter("subject", subject);
query.setParameter("serviceType", serviceType);
Expand All @@ -75,7 +75,8 @@ public List<Slot> getSlotsBySubjectReferenceIdAndServiceTypeAndOrderUuids(Refere
.createQuery("FROM Slot slot " +
"WHERE slot.schedule.subject=:subject and " +
"slot.serviceType=:serviceType and"
+ " slot.order.uuid IN :orderUuids");
+ " slot.order.uuid IN :orderUuids and "
+ "slot.voided = 0");

query.setParameter("subject", subject);
query.setParameter("serviceType", serviceType);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import org.openmrs.DrugOrder;
import org.openmrs.api.impl.BaseOpenmrsService;
import org.openmrs.module.ipd.api.util.DateTimeUtil;
import org.openmrs.module.ipd.model.DrugOrderSchedule;
import org.openmrs.module.ipd.api.model.Slot;
import org.openmrs.module.ipd.contract.ScheduleMedicationRequest;
Expand Down Expand Up @@ -103,31 +104,31 @@ private List<LocalDateTime> getSlotsStartTimeWithStartTimeDurationFrequency(Sche
for (DrugOrder drugOrder : slotsByOrder.keySet()) {
Double frequencyPerDay = drugOrder.getFrequency().getFrequencyPerDay();
String frequency=drugOrder.getFrequency().getName();
Map<LocalDate, List<Long>> groupedByDateAndEpoch = slotsByOrder.get(drugOrder).stream()
Map<LocalDate, List<LocalDateTime>> groupedByDateAndEpoch = slotsByOrder.get(drugOrder).stream()
.collect(Collectors.groupingBy(
obj -> obj.getStartDateTime().toLocalDate(),
Collectors.mapping(
obj -> obj.getStartDateTime().toEpochSecond(java.time.ZoneOffset.UTC),
obj -> obj.getStartDateTime(),
Collectors.toList()
)
));

List<List<Long>> sortedList = groupedByDateAndEpoch.entrySet().stream()
List<List<LocalDateTime>> 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(sortedList.get(0).get(0));
drugOrderSchedule.setSlotStartTime(DateTimeUtil.convertLocalDateTimeToUTCEpoc(sortedList.get(0).get(0)));
}
else if (sortedList.get(0).size() == frequencyPerDay || (sortedList.size() == 1)) {
drugOrderSchedule.setDayWiseSlotsStartTime(sortedList.get(0));
drugOrderSchedule.setDayWiseSlotsStartTime(sortedList.get(0).stream().map(DateTimeUtil::convertLocalDateTimeToUTCEpoc).collect(Collectors.toList()));
} else {
drugOrderSchedule.setFirstDaySlotsStartTime(sortedList.get(0));
drugOrderSchedule.setRemainingDaySlotsStartTime(sortedList.get(sortedList.size() - 1));
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));
drugOrderSchedule.setDayWiseSlotsStartTime(sortedList.get(1).stream().map(DateTimeUtil::convertLocalDateTimeToUTCEpoc).collect(Collectors.toList()));
}
}
drugOrderSchedule.setSlots(slotsByOrder.get(drugOrder));
Expand Down

0 comments on commit 1b6c4b5

Please sign in to comment.