diff --git a/api/src/main/java/org/openmrs/module/ipd/api/dao/SlotDAO.java b/api/src/main/java/org/openmrs/module/ipd/api/dao/SlotDAO.java index 8dda610..2d46d1d 100644 --- a/api/src/main/java/org/openmrs/module/ipd/api/dao/SlotDAO.java +++ b/api/src/main/java/org/openmrs/module/ipd/api/dao/SlotDAO.java @@ -29,4 +29,7 @@ public interface SlotDAO { List getSlotsByPatientAndVisitAndServiceType(Reference subject, Visit visit, Concept serviceType); List getSlotsBySubjectReferenceIdAndForTheGivenTimeFrame(Reference subject, LocalDateTime localStartDate, LocalDateTime localEndDate); + + List getSlotsBySubjectIncludingAdministeredTimeFrame(Reference subject, LocalDateTime localStartDate, LocalDateTime localEndDate); + } diff --git a/api/src/main/java/org/openmrs/module/ipd/api/dao/impl/HibernateSlotDAO.java b/api/src/main/java/org/openmrs/module/ipd/api/dao/impl/HibernateSlotDAO.java index 926bcb7..724454d 100644 --- a/api/src/main/java/org/openmrs/module/ipd/api/dao/impl/HibernateSlotDAO.java +++ b/api/src/main/java/org/openmrs/module/ipd/api/dao/impl/HibernateSlotDAO.java @@ -8,6 +8,8 @@ import org.openmrs.module.ipd.api.model.Slot; import org.hibernate.SessionFactory; import org.openmrs.api.db.DAOException; +import org.openmrs.module.ipd.api.util.DateTimeUtil; +import org.openmrs.util.DateUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -109,4 +111,24 @@ public List getSlotsBySubjectReferenceIdAndForTheGivenTimeFrame(Reference return query.getResultList(); } + + @Override + public List getSlotsBySubjectIncludingAdministeredTimeFrame(Reference subject, LocalDateTime localStartDate, LocalDateTime localEndDate) { + Query query = sessionFactory.getCurrentSession() + .createQuery("SELECT slot FROM Slot slot " + + "LEFT JOIN slot.medicationAdministration medAdmin " + + "WHERE (slot.schedule.subject = :subject) AND " + + "(((slot.startDateTime BETWEEN :startDateTime AND :endDateTime) AND " + + "(medAdmin.administeredDateTime BETWEEN :startDate AND :endDate or medAdmin is null)) OR " + + "(medAdmin is not null AND " + + "(medAdmin.administeredDateTime BETWEEN :startDate AND :endDate)))"); + + query.setParameter("subject", subject); + query.setParameter("startDateTime", localStartDate); + query.setParameter("endDateTime", localEndDate); + query.setParameter("startDate", DateTimeUtil.convertLocalDateTimeDate(localStartDate)); + query.setParameter("endDate", DateTimeUtil.convertLocalDateTimeDate(localEndDate)); + + return query.getResultList(); + } } diff --git a/api/src/main/java/org/openmrs/module/ipd/api/model/Slot.java b/api/src/main/java/org/openmrs/module/ipd/api/model/Slot.java index 33c6e7b..03b6d80 100644 --- a/api/src/main/java/org/openmrs/module/ipd/api/model/Slot.java +++ b/api/src/main/java/org/openmrs/module/ipd/api/model/Slot.java @@ -22,9 +22,9 @@ public class Slot extends BaseChangeableOpenmrsData { public enum SlotStatus { SCHEDULED, - MISSED, + NOT_DONE, COMPLETED, - CANCELLED + STOPPED } @EqualsAndHashCode.Include diff --git a/api/src/main/java/org/openmrs/module/ipd/api/service/SlotService.java b/api/src/main/java/org/openmrs/module/ipd/api/service/SlotService.java index 13a54e8..328895f 100644 --- a/api/src/main/java/org/openmrs/module/ipd/api/service/SlotService.java +++ b/api/src/main/java/org/openmrs/module/ipd/api/service/SlotService.java @@ -35,4 +35,6 @@ public interface SlotService extends OpenmrsService { List getSlotsByPatientAndVisitAndServiceType(Reference subject, Visit visit, Concept serviceType); List getSlotsBySubjectReferenceIdAndForTheGivenTimeFrame(Reference reference, LocalDateTime localStartDate, LocalDateTime localEndDate); + + List getSlotsBySubjectReferenceIncludingAdministeredTimeFrame(Reference subject, LocalDateTime localStartDate, LocalDateTime localEndDate); } diff --git a/api/src/main/java/org/openmrs/module/ipd/api/service/impl/SlotServiceImpl.java b/api/src/main/java/org/openmrs/module/ipd/api/service/impl/SlotServiceImpl.java index d951e57..079fd18 100644 --- a/api/src/main/java/org/openmrs/module/ipd/api/service/impl/SlotServiceImpl.java +++ b/api/src/main/java/org/openmrs/module/ipd/api/service/impl/SlotServiceImpl.java @@ -83,4 +83,9 @@ public List getSlotsByPatientAndVisitAndServiceType(Reference subject, Vis public List getSlotsBySubjectReferenceIdAndForTheGivenTimeFrame(Reference subject, LocalDateTime localStartDate, LocalDateTime localEndDate) { return slotDAO.getSlotsBySubjectReferenceIdAndForTheGivenTimeFrame(subject, localStartDate, localEndDate); } + + @Override + public List getSlotsBySubjectReferenceIncludingAdministeredTimeFrame(Reference subject, LocalDateTime localStartDate, LocalDateTime localEndDate) { + return slotDAO.getSlotsBySubjectIncludingAdministeredTimeFrame(subject, localStartDate, localEndDate); + } } diff --git a/api/src/main/java/org/openmrs/module/ipd/api/translators/MedicationAdministrationToSlotStatusTranslator.java b/api/src/main/java/org/openmrs/module/ipd/api/translators/MedicationAdministrationToSlotStatusTranslator.java new file mode 100644 index 0000000..f1d0079 --- /dev/null +++ b/api/src/main/java/org/openmrs/module/ipd/api/translators/MedicationAdministrationToSlotStatusTranslator.java @@ -0,0 +1,22 @@ +package org.openmrs.module.ipd.api.translators; + +import org.hl7.fhir.r4.model.MedicationAdministration; +import org.openmrs.module.ipd.api.model.Slot; +import org.springframework.stereotype.Component; + +@Component +public class MedicationAdministrationToSlotStatusTranslator { + + public Slot.SlotStatus toSlotStatus(MedicationAdministration.MedicationAdministrationStatus medicationAdministrationStatus){ + if (medicationAdministrationStatus.equals(MedicationAdministration.MedicationAdministrationStatus.COMPLETED)){ + return Slot.SlotStatus.COMPLETED; + } + if (medicationAdministrationStatus.equals(MedicationAdministration.MedicationAdministrationStatus.NOTDONE)){ + return Slot.SlotStatus.NOT_DONE; + } + if (medicationAdministrationStatus.equals(MedicationAdministration.MedicationAdministrationStatus.STOPPED)){ + return Slot.SlotStatus.STOPPED; + } + return null; + } +} diff --git a/api/src/main/java/org/openmrs/module/ipd/api/util/DateTimeUtil.java b/api/src/main/java/org/openmrs/module/ipd/api/util/DateTimeUtil.java index 45c6cc3..34f533a 100644 --- a/api/src/main/java/org/openmrs/module/ipd/api/util/DateTimeUtil.java +++ b/api/src/main/java/org/openmrs/module/ipd/api/util/DateTimeUtil.java @@ -15,4 +15,8 @@ public static long convertLocalDateTimeToUTCEpoc(LocalDateTime localDateTime) { public static LocalDateTime convertDateToLocalDateTime(Date date) { return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()); } + + public static Date convertLocalDateTimeDate(LocalDateTime localDateTime) { + return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); + } } \ No newline at end of file diff --git a/api/src/main/java/org/openmrs/module/ipd/api/util/IPDConstants.java b/api/src/main/java/org/openmrs/module/ipd/api/util/IPDConstants.java new file mode 100644 index 0000000..cf264fe --- /dev/null +++ b/api/src/main/java/org/openmrs/module/ipd/api/util/IPDConstants.java @@ -0,0 +1,7 @@ +package org.openmrs.module.ipd.api.util; + +public class IPDConstants { + + public static final String IPD_VIEW_DRUG_CHART = "drugChart"; + +} diff --git a/api/src/test/java/org/openmrs/module/ipd/api/dao/impl/HibernateSlotDAOIntegrationTest.java b/api/src/test/java/org/openmrs/module/ipd/api/dao/impl/HibernateSlotDAOIntegrationTest.java index 2d26ef5..3b33402 100644 --- a/api/src/test/java/org/openmrs/module/ipd/api/dao/impl/HibernateSlotDAOIntegrationTest.java +++ b/api/src/test/java/org/openmrs/module/ipd/api/dao/impl/HibernateSlotDAOIntegrationTest.java @@ -7,9 +7,11 @@ import org.openmrs.DrugOrder; import org.openmrs.Patient; import org.openmrs.api.context.Context; +import org.openmrs.module.fhir2.apiext.dao.FhirMedicationAdministrationDao; import org.openmrs.module.ipd.api.BaseIntegrationTest; import org.openmrs.module.ipd.api.dao.ScheduleDAO; import org.openmrs.module.ipd.api.dao.SlotDAO; +import org.openmrs.module.ipd.api.model.MedicationAdministration; import org.openmrs.module.ipd.api.model.Reference; import org.openmrs.module.ipd.api.model.Schedule; import org.openmrs.module.ipd.api.model.Slot; @@ -31,6 +33,9 @@ public class HibernateSlotDAOIntegrationTest extends BaseIntegrationTest { @Autowired private SessionFactory sessionFactory; + @Autowired + private FhirMedicationAdministrationDao medicationAdministrationDao; + @Test public void shouldSaveTheSlotForPatientGivenPatientSchedule() { @@ -238,4 +243,88 @@ public void shouldGetTheSavedSlotsForPatientByForReferenceIdAndServiceType() { sessionFactory.getCurrentSession().delete(savedSlot2); sessionFactory.getCurrentSession().delete(savedSchedule); } + + @Test + public void shouldGetTheSavedSlotsForPatientByAdministeredTime() { + + String orderUuid = "921de0a3-05c4-444a-be03-e01b4c4b9142"; + DrugOrder drugOrder = (DrugOrder) Context.getOrderService().getOrderByUuid(orderUuid); + DrugOrder drugOrder2 = (DrugOrder) Context.getOrderService().getOrderByUuid("921de0a3-05c4-444a-be03-e01b4c4b9143"); + Reference patientReference = new Reference(Patient.class.getTypeName(), "2c33920f-7aa6-0000-998a-60412d8ff7d5"); + Reference providerReference = new Reference(Patient.class.getTypeName(), "d869ad24-d2a0-4747-a888-fe55048bb7ce"); + Concept testConcept = Context.getConceptService().getConceptByName("UNKNOWN"); + LocalDateTime startDate = DateTimeUtil.convertDateToLocalDateTime(drugOrder.getEffectiveStartDate()); + LocalDateTime endDate = DateTimeUtil.convertDateToLocalDateTime(drugOrder.getEffectiveStopDate()); + + Schedule schedule = new Schedule(); + schedule.setSubject(patientReference); + schedule.setActor(providerReference); + schedule.setStartDate(startDate); + schedule.setEndDate(endDate); + schedule.setServiceType(testConcept); + + Schedule savedSchedule = scheduleDAO.saveSchedule(schedule); + + LocalDateTime startTime = LocalDateTime.now(); + LocalDateTime slot1StartTime = LocalDateTime.now().plusHours(1); + LocalDateTime slot2StartTime = LocalDateTime.now().plusDays(-1); + LocalDateTime medicationAdministeredTime= LocalDateTime.now().plusHours(3); + LocalDateTime medicationAdministeredTime2= LocalDateTime.now().plusDays(3); + + + MedicationAdministration medicationAdministration=new MedicationAdministration(); + medicationAdministration.setStatus(testConcept); + medicationAdministration.setAdministeredDateTime(DateTimeUtil.convertLocalDateTimeDate(medicationAdministeredTime)); + MedicationAdministration savedMedicationAdministration= medicationAdministrationDao.createOrUpdate(medicationAdministration); + + MedicationAdministration medicationAdministration2=new MedicationAdministration(); + medicationAdministration2.setStatus(testConcept); + medicationAdministration2.setAdministeredDateTime(DateTimeUtil.convertLocalDateTimeDate(medicationAdministeredTime2)); + MedicationAdministration savedMedicationAdministration2= medicationAdministrationDao.createOrUpdate(medicationAdministration2); + + Slot slot1 = new Slot(); + slot1.setSchedule(savedSchedule); + slot1.setServiceType(testConcept); + slot1.setStartDateTime(slot1StartTime); + slot1.setOrder(drugOrder); + + Slot slot2 = new Slot(); + slot2.setSchedule(savedSchedule); + slot2.setServiceType(testConcept); + slot2.setStartDateTime(slot2StartTime); + slot2.setMedicationAdministration(savedMedicationAdministration); + slot2.setOrder(drugOrder2); + + Slot slot3 = new Slot(); + slot3.setSchedule(savedSchedule); + slot3.setServiceType(testConcept); + slot3.setStartDateTime(slot2StartTime); + slot3.setOrder(drugOrder); + + Slot slot4 = new Slot(); + slot4.setSchedule(savedSchedule); + slot4.setServiceType(testConcept); + slot4.setStartDateTime(slot1StartTime); + slot4.setMedicationAdministration(savedMedicationAdministration2); + slot4.setOrder(drugOrder); + + Slot savedSlot1 = slotDAO.saveSlot(slot1); + Slot savedSlot2 = slotDAO.saveSlot(slot2); + Slot savedSlot3 = slotDAO.saveSlot(slot3); + Slot savedSlot4 = slotDAO.saveSlot(slot4); + + + List slotsBySubjectReferenceIdAndServiceType = slotDAO.getSlotsBySubjectIncludingAdministeredTimeFrame(patientReference,startTime,startTime.plusHours(6)); + + Assertions.assertEquals(2, slotsBySubjectReferenceIdAndServiceType.size()); + + sessionFactory.getCurrentSession().delete(savedMedicationAdministration); + sessionFactory.getCurrentSession().delete(savedMedicationAdministration2); + sessionFactory.getCurrentSession().delete(savedSlot1); + sessionFactory.getCurrentSession().delete(savedSlot2); + sessionFactory.getCurrentSession().delete(savedSlot3); + sessionFactory.getCurrentSession().delete(savedSlot4); + sessionFactory.getCurrentSession().delete(savedSchedule); + + } } diff --git a/api/src/test/java/org/openmrs/module/ipd/api/service/impl/SlotServiceImplTest.java b/api/src/test/java/org/openmrs/module/ipd/api/service/impl/SlotServiceImplTest.java index 6e9cdde..9306924 100644 --- a/api/src/test/java/org/openmrs/module/ipd/api/service/impl/SlotServiceImplTest.java +++ b/api/src/test/java/org/openmrs/module/ipd/api/service/impl/SlotServiceImplTest.java @@ -15,6 +15,7 @@ import org.openmrs.module.ipd.api.model.Slot; import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -119,4 +120,19 @@ public void shouldInvokeGetSlotsByForReferenceAndServiceTypeAndOrderUuidsWithGiv Mockito.verify(slotDAO, Mockito.times(1)).getSlotsBySubjectReferenceIdAndServiceTypeAndOrderUuids(patientReference, medicationRequestConcept, orderUuids); } + + @Test + public void shouldInvokeGetSlotsBySubjectReferenceAndAdministeredTimeWithGivenTimeFrame() { + + List slots = new ArrayList<>(); + LocalDateTime startTime= LocalDateTime.now(); + LocalDateTime endTime = startTime.plusHours(8); + Reference patientReference = new Reference(Patient.class.getTypeName(), "patientUuid"); + + Mockito.when(slotDAO.getSlotsBySubjectIncludingAdministeredTimeFrame(patientReference, startTime, endTime)).thenReturn(slots); + + slotService.getSlotsBySubjectReferenceIncludingAdministeredTimeFrame(patientReference,startTime,endTime); + + Mockito.verify(slotDAO, Mockito.times(1)).getSlotsBySubjectIncludingAdministeredTimeFrame(patientReference, startTime, endTime); + } } \ No newline at end of file diff --git a/omod/src/main/java/org/openmrs/module/ipd/contract/MedicationAdministrationRequest.java b/omod/src/main/java/org/openmrs/module/ipd/contract/MedicationAdministrationRequest.java index 30270d6..2a02506 100644 --- a/omod/src/main/java/org/openmrs/module/ipd/contract/MedicationAdministrationRequest.java +++ b/omod/src/main/java/org/openmrs/module/ipd/contract/MedicationAdministrationRequest.java @@ -33,7 +33,6 @@ public class MedicationAdministrationRequest { private String slotUuid; public Date getAdministeredDateTimeAsLocaltime() { - return this.administeredDateTime != null ? new Date(TimeUnit.SECONDS.toMillis(this.administeredDateTime)): null; + return this.administeredDateTime != null ? new Date(TimeUnit.SECONDS.toMillis(this.administeredDateTime)): new Date(); } - } diff --git a/omod/src/main/java/org/openmrs/module/ipd/controller/IPDScheduleController.java b/omod/src/main/java/org/openmrs/module/ipd/controller/IPDScheduleController.java index 615e143..ba7860d 100644 --- a/omod/src/main/java/org/openmrs/module/ipd/controller/IPDScheduleController.java +++ b/omod/src/main/java/org/openmrs/module/ipd/controller/IPDScheduleController.java @@ -3,6 +3,8 @@ import lombok.extern.slf4j.Slf4j; import org.openmrs.module.ipd.api.model.Schedule; import org.openmrs.module.ipd.api.model.Slot; +import org.openmrs.module.ipd.api.util.DateTimeUtil; +import org.openmrs.module.ipd.api.util.IPDConstants; import org.openmrs.module.ipd.contract.MedicationScheduleResponse; import org.openmrs.module.ipd.contract.MedicationSlotResponse; import org.openmrs.module.ipd.contract.ScheduleMedicationRequest; @@ -17,6 +19,7 @@ import org.springframework.web.bind.annotation.*; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -66,12 +69,14 @@ public ResponseEntity updateMedicationSchedule(@RequestBody ScheduleMedi @RequestMapping(value = "type/medication", method = RequestMethod.GET, params = {"patientUuid", "startTime", "endTime"}) @ResponseBody public ResponseEntity getMedicationSlotsByDate(@RequestParam(value = "patientUuid") String patientUuid, - @RequestParam(value = "startTime") Long startTime, @RequestParam(value = "endTime") Long endTime) { + @RequestParam(value = "startTime") Long startTime, @RequestParam(value = "endTime") Long endTime, + @RequestParam(value = "view", required = false) String view) { try { if (startTime != null && endTime != null) { LocalDateTime localStartDate = convertEpocUTCToLocalTimeZone(startTime); LocalDateTime localEndDate = convertEpocUTCToLocalTimeZone(endTime); - List slots = ipdScheduleService.getMedicationSlotsForTheGivenTimeFrame(patientUuid, localStartDate, localEndDate); + Boolean considerAdministeredTime = view!=null & IPDConstants.IPD_VIEW_DRUG_CHART.equals(view); + List slots = ipdScheduleService.getMedicationSlotsForTheGivenTimeFrame(patientUuid, localStartDate, localEndDate,considerAdministeredTime); return new ResponseEntity<>(constructResponse(slots), OK); } throw new Exception(); @@ -102,9 +107,9 @@ public ResponseEntity getMedicationSlotsByOrderUuids(@RequestParam(value } } - private List constructResponse(List slots) { Map> slotsBySchedule = slots.stream().collect(Collectors.groupingBy(Slot::getSchedule)); return slotsBySchedule.entrySet().stream().map(entry -> createFrom(entry.getKey(), entry.getValue())).collect(Collectors.toList()); } + } \ No newline at end of file diff --git a/omod/src/main/java/org/openmrs/module/ipd/service/IPDScheduleService.java b/omod/src/main/java/org/openmrs/module/ipd/service/IPDScheduleService.java index 9893fef..8940ced 100644 --- a/omod/src/main/java/org/openmrs/module/ipd/service/IPDScheduleService.java +++ b/omod/src/main/java/org/openmrs/module/ipd/service/IPDScheduleService.java @@ -15,5 +15,5 @@ public interface IPDScheduleService { List getMedicationSlots(String patientUuid, ServiceType serviceType); List getMedicationSlots(String patientUuid, ServiceType serviceType, List orderUuids); Schedule updateMedicationSchedule(ScheduleMedicationRequest scheduleMedicationRequest); - List getMedicationSlotsForTheGivenTimeFrame(String patientUuid, LocalDateTime localStartDate, LocalDateTime localEndDate); + List getMedicationSlotsForTheGivenTimeFrame(String patientUuid, LocalDateTime localStartDate, LocalDateTime localEndDate,Boolean considerAdministeredTime); } \ No newline at end of file diff --git a/omod/src/main/java/org/openmrs/module/ipd/service/impl/IPDMedicationAdministrationServiceImpl.java b/omod/src/main/java/org/openmrs/module/ipd/service/impl/IPDMedicationAdministrationServiceImpl.java index 5ead815..5e70669 100644 --- a/omod/src/main/java/org/openmrs/module/ipd/service/impl/IPDMedicationAdministrationServiceImpl.java +++ b/omod/src/main/java/org/openmrs/module/ipd/service/impl/IPDMedicationAdministrationServiceImpl.java @@ -13,6 +13,7 @@ import org.openmrs.module.ipd.api.model.Slot; import org.openmrs.module.ipd.api.service.ScheduleService; import org.openmrs.module.ipd.api.service.SlotService; +import org.openmrs.module.ipd.api.translators.MedicationAdministrationToSlotStatusTranslator; import org.openmrs.module.ipd.api.util.DateTimeUtil; import org.openmrs.module.ipd.contract.MedicationAdministrationRequest; import org.openmrs.module.ipd.factory.MedicationAdministrationFactory; @@ -39,13 +40,15 @@ public class IPDMedicationAdministrationServiceImpl implements IPDMedicationAdmi private SlotService slotService; private ScheduleService scheduleService; private FhirMedicationAdministrationDao fhirMedicationAdministrationDao; + private MedicationAdministrationToSlotStatusTranslator medicationAdministrationToSlotStatusTranslator; @Autowired public IPDMedicationAdministrationServiceImpl(FhirMedicationAdministrationService fhirMedicationAdministrationService, MedicationAdministrationTranslator medicationAdministrationTranslator, MedicationAdministrationFactory medicationAdministrationFactory, SlotFactory slotFactory, SlotService slotService, ScheduleService scheduleService, - FhirMedicationAdministrationDao fhirMedicationAdministrationDao) { + FhirMedicationAdministrationDao fhirMedicationAdministrationDao, + MedicationAdministrationToSlotStatusTranslator medicationAdministrationToSlotStatusTranslator) { this.fhirMedicationAdministrationService = fhirMedicationAdministrationService; this.medicationAdministrationTranslator = medicationAdministrationTranslator; this.medicationAdministrationFactory = medicationAdministrationFactory; @@ -53,6 +56,7 @@ public IPDMedicationAdministrationServiceImpl(FhirMedicationAdministrationServic this.slotService = slotService; this.scheduleService = scheduleService; this.fhirMedicationAdministrationDao = fhirMedicationAdministrationDao; + this.medicationAdministrationToSlotStatusTranslator=medicationAdministrationToSlotStatusTranslator; } private org.hl7.fhir.r4.model.MedicationAdministration createMedicationAdministration(MedicationAdministrationRequest medicationAdministrationRequest) { @@ -68,17 +72,15 @@ public org.hl7.fhir.r4.model.MedicationAdministration saveScheduledMedicationAdm } else { if (slot.getMedicationAdministration() != null) { return fhirMedicationAdministrationService.get(slot.getMedicationAdministration().getUuid()); - } else if (!StringUtils.isBlank(medicationAdministrationRequest.getUuid())) { + } + if (!StringUtils.isBlank(medicationAdministrationRequest.getUuid())) { return fhirMedicationAdministrationService.get(medicationAdministrationRequest.getUuid()); - } else { - org.hl7.fhir.r4.model.MedicationAdministration medicationAdministration = createMedicationAdministration(medicationAdministrationRequest); - if (medicationAdministration.getStatus().equals(org.hl7.fhir.r4.model.MedicationAdministration.MedicationAdministrationStatus.COMPLETED)) { - slot.setStatus(Slot.SlotStatus.COMPLETED); - } - slot.setMedicationAdministration((MedicationAdministration) fhirMedicationAdministrationDao.get(medicationAdministration.getId())); - slotService.saveSlot(slot); - return medicationAdministration; } + org.hl7.fhir.r4.model.MedicationAdministration medicationAdministration = createMedicationAdministration(medicationAdministrationRequest); + slot.setStatus(medicationAdministrationToSlotStatusTranslator.toSlotStatus(medicationAdministration.getStatus())); + slot.setMedicationAdministration((MedicationAdministration) fhirMedicationAdministrationDao.get(medicationAdministration.getId())); + slotService.saveSlot(slot); + return medicationAdministration; } } diff --git a/omod/src/main/java/org/openmrs/module/ipd/service/impl/IPDScheduleServiceImpl.java b/omod/src/main/java/org/openmrs/module/ipd/service/impl/IPDScheduleServiceImpl.java index 767d3e2..d5335ab 100644 --- a/omod/src/main/java/org/openmrs/module/ipd/service/impl/IPDScheduleServiceImpl.java +++ b/omod/src/main/java/org/openmrs/module/ipd/service/impl/IPDScheduleServiceImpl.java @@ -115,10 +115,13 @@ private void voidExistingMedicationSlotsForOrder(String patientUuid,String order @Override - public List getMedicationSlotsForTheGivenTimeFrame(String patientUuid, LocalDateTime localStartDate, LocalDateTime localEndDate) { + public List getMedicationSlotsForTheGivenTimeFrame(String patientUuid, LocalDateTime localStartDate, LocalDateTime localEndDate,Boolean considerAdministeredTime) { Optional subjectReference = referenceService.getReferenceByTypeAndTargetUUID(Patient.class.getTypeName(), patientUuid); if(!subjectReference.isPresent()) return Collections.emptyList(); + if (considerAdministeredTime) { + return slotService.getSlotsBySubjectReferenceIncludingAdministeredTimeFrame(subjectReference.get(), localStartDate, localEndDate); + } return slotService.getSlotsBySubjectReferenceIdAndForTheGivenTimeFrame(subjectReference.get(), localStartDate,localEndDate); } } \ No newline at end of file