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 2a02506..43402ec 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 @@ -26,9 +26,9 @@ public class MedicationAdministrationRequest { private String drugUuid; private String dosingInstructions; private Double dose; - private String doseUnitsUuid; - private String routeUuid; - private String siteUuid; + private String doseUnits; + private String route; + private String site; private Long administeredDateTime; private String slotUuid; diff --git a/omod/src/main/java/org/openmrs/module/ipd/contract/ScheduleMedicationRequest.java b/omod/src/main/java/org/openmrs/module/ipd/contract/ScheduleMedicationRequest.java index c7f196d..5c83ad1 100644 --- a/omod/src/main/java/org/openmrs/module/ipd/contract/ScheduleMedicationRequest.java +++ b/omod/src/main/java/org/openmrs/module/ipd/contract/ScheduleMedicationRequest.java @@ -3,6 +3,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; +import lombok.Setter; import lombok.NoArgsConstructor; import org.openmrs.module.ipd.api.util.DateTimeUtil; @@ -13,6 +14,7 @@ import static org.openmrs.module.ipd.api.util.DateTimeUtil.convertEpocUTCToLocalTimeZone; @Getter +@Setter @Builder @NoArgsConstructor @AllArgsConstructor diff --git a/omod/src/main/java/org/openmrs/module/ipd/factory/MedicationAdministrationFactory.java b/omod/src/main/java/org/openmrs/module/ipd/factory/MedicationAdministrationFactory.java index 89b5923..695d1cf 100644 --- a/omod/src/main/java/org/openmrs/module/ipd/factory/MedicationAdministrationFactory.java +++ b/omod/src/main/java/org/openmrs/module/ipd/factory/MedicationAdministrationFactory.java @@ -61,9 +61,9 @@ public MedicationAdministration mapRequestToMedicationAdministration(MedicationA medicationAdministration.setDrug(Context.getConceptService().getDrugByUuid(request.getDrugUuid())); medicationAdministration.setDosingInstructions(request.getDosingInstructions()); medicationAdministration.setDose(request.getDose()); - medicationAdministration.setDoseUnits(Context.getConceptService().getConceptByUuid(request.getDoseUnitsUuid())); - medicationAdministration.setRoute(Context.getConceptService().getConceptByUuid(request.getRouteUuid())); - medicationAdministration.setSite(Context.getConceptService().getConceptByUuid(request.getSiteUuid())); + medicationAdministration.setDoseUnits(Context.getConceptService().getConceptByName(request.getDoseUnits())); + medicationAdministration.setRoute(Context.getConceptService().getConceptByName(request.getRoute())); + medicationAdministration.setSite(Context.getConceptService().getConceptByName(request.getSite())); return medicationAdministration; } 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 5e70669..01f9da1 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 @@ -16,7 +16,9 @@ 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.contract.ScheduleMedicationRequest; import org.openmrs.module.ipd.factory.MedicationAdministrationFactory; +import org.openmrs.module.ipd.factory.ScheduleFactory; import org.openmrs.module.ipd.factory.SlotFactory; import org.openmrs.module.ipd.service.IPDMedicationAdministrationService; import org.springframework.beans.factory.annotation.Autowired; @@ -41,6 +43,7 @@ public class IPDMedicationAdministrationServiceImpl implements IPDMedicationAdmi private ScheduleService scheduleService; private FhirMedicationAdministrationDao fhirMedicationAdministrationDao; private MedicationAdministrationToSlotStatusTranslator medicationAdministrationToSlotStatusTranslator; + private ScheduleFactory scheduleFactory; @Autowired public IPDMedicationAdministrationServiceImpl(FhirMedicationAdministrationService fhirMedicationAdministrationService, @@ -48,7 +51,8 @@ public IPDMedicationAdministrationServiceImpl(FhirMedicationAdministrationServic MedicationAdministrationFactory medicationAdministrationFactory, SlotFactory slotFactory, SlotService slotService, ScheduleService scheduleService, FhirMedicationAdministrationDao fhirMedicationAdministrationDao, - MedicationAdministrationToSlotStatusTranslator medicationAdministrationToSlotStatusTranslator) { + MedicationAdministrationToSlotStatusTranslator medicationAdministrationToSlotStatusTranslator, + ScheduleFactory scheduleFactory) { this.fhirMedicationAdministrationService = fhirMedicationAdministrationService; this.medicationAdministrationTranslator = medicationAdministrationTranslator; this.medicationAdministrationFactory = medicationAdministrationFactory; @@ -57,6 +61,7 @@ public IPDMedicationAdministrationServiceImpl(FhirMedicationAdministrationServic this.scheduleService = scheduleService; this.fhirMedicationAdministrationDao = fhirMedicationAdministrationDao; this.medicationAdministrationToSlotStatusTranslator=medicationAdministrationToSlotStatusTranslator; + this.scheduleFactory = scheduleFactory; } private org.hl7.fhir.r4.model.MedicationAdministration createMedicationAdministration(MedicationAdministrationRequest medicationAdministrationRequest) { @@ -90,18 +95,20 @@ public org.hl7.fhir.r4.model.MedicationAdministration saveAdhocMedicationAdminis Visit visit = Context.getVisitService().getActiveVisitsByPatient(patient).get(0); Schedule schedule = scheduleService.getScheduleByVisit(visit); if (schedule == null) { - throw new RuntimeException("Active Schedule not found"); - } else { - org.hl7.fhir.r4.model.MedicationAdministration medicationAdministration = createMedicationAdministration(medicationAdministrationRequest); - MedicationAdministration openmrsMedicationAdministration = (MedicationAdministration) fhirMedicationAdministrationDao.get(medicationAdministration.getId()); - List slotsStartTime = new ArrayList<>(); - slotsStartTime.add(DateTimeUtil.convertEpocUTCToLocalTimeZone(medicationAdministrationRequest.getAdministeredDateTime())); - ServiceType serviceType = openmrsMedicationAdministration.getDrugOrder() == null ? ServiceType.EMERGENCY_MEDICATION_REQUEST : ServiceType.AS_NEEDED_MEDICATION_REQUEST; - slotFactory.createSlotsForMedicationFrom(schedule, slotsStartTime, openmrsMedicationAdministration.getDrugOrder(), - openmrsMedicationAdministration, Slot.SlotStatus.COMPLETED, serviceType) - .forEach(slotService::saveSlot); - return medicationAdministration; + ScheduleMedicationRequest scheduleMedicationRequest = new ScheduleMedicationRequest(); + scheduleMedicationRequest.setPatientUuid(medicationAdministrationRequest.getPatientUuid()); + scheduleMedicationRequest.setProviderUuid(medicationAdministrationRequest.getProviders().get(0).getUuid()); + schedule = scheduleService.saveSchedule(scheduleFactory.createScheduleForMedicationFrom(scheduleMedicationRequest, visit)); } + org.hl7.fhir.r4.model.MedicationAdministration medicationAdministration = createMedicationAdministration(medicationAdministrationRequest); + MedicationAdministration openmrsMedicationAdministration = (MedicationAdministration) fhirMedicationAdministrationDao.get(medicationAdministration.getId()); + List slotsStartTime = new ArrayList<>(); + slotsStartTime.add(DateTimeUtil.convertEpocUTCToLocalTimeZone(medicationAdministrationRequest.getAdministeredDateTime())); + ServiceType serviceType = openmrsMedicationAdministration.getDrugOrder() == null ? ServiceType.EMERGENCY_MEDICATION_REQUEST : ServiceType.AS_NEEDED_MEDICATION_REQUEST; + slotFactory.createSlotsForMedicationFrom(schedule, slotsStartTime, openmrsMedicationAdministration.getDrugOrder(), + openmrsMedicationAdministration, Slot.SlotStatus.COMPLETED, serviceType) + .forEach(slotService::saveSlot); + return medicationAdministration; } }