From 1ae59c41ac362d97a4996f546c9668f8d71d1576 Mon Sep 17 00:00:00 2001 From: Parvathy Babu <102500787+parvathy00@users.noreply.github.com> Date: Wed, 15 May 2024 17:05:28 +0530 Subject: [PATCH] BAH-3745 | Add. Api To Fetch Order By Order Id (#262) * Parvathy | BAH-3745 | Add. Api To Fetch Order By Order Id * Parvathy | BAH-3745 | Add. Test Cases * Parvathy | BAH-3745 | Refactor. Fetch Drug Order By Uuid --- .../mapper/BahmniDrugOrderMapper.java | 66 ++++++++++--------- .../service/BahmniDrugOrderService.java | 2 + .../impl/BahmniDrugOrderServiceImpl.java | 7 ++ .../bahmnicore/dao/impl/OrderDaoImplIT.java | 7 +- .../controller/BahmniDrugOrderController.java | 17 +++-- .../BahmniDrugOrderControllerIT.java | 7 ++ .../mapper/BahmniDrugOrderMapperTest.java | 42 ++++++++++++ 7 files changed, 108 insertions(+), 40 deletions(-) diff --git a/bahmni-emr-api/src/main/java/org/openmrs/module/bahmniemrapi/drugorder/mapper/BahmniDrugOrderMapper.java b/bahmni-emr-api/src/main/java/org/openmrs/module/bahmniemrapi/drugorder/mapper/BahmniDrugOrderMapper.java index 6d63028ff6..e7ba05e633 100644 --- a/bahmni-emr-api/src/main/java/org/openmrs/module/bahmniemrapi/drugorder/mapper/BahmniDrugOrderMapper.java +++ b/bahmni-emr-api/src/main/java/org/openmrs/module/bahmniemrapi/drugorder/mapper/BahmniDrugOrderMapper.java @@ -30,39 +30,10 @@ public List mapToResponse(List activeDrugOrders, Map discontinuedOrderMap, String locale) throws IOException { - OrderMapper1_12 drugOrderMapper = new OrderMapper1_12(); - List bahmniDrugOrders = new ArrayList<>(); for (DrugOrder openMRSDrugOrder : activeDrugOrders) { - BahmniDrugOrder bahmniDrugOrder = new BahmniDrugOrder(); - - bahmniDrugOrder.setDrugOrder(drugOrderMapper.mapDrugOrder(openMRSDrugOrder)); - if(locale != null) { - Locale tempLocale = new Locale(locale); - String localeSpecificName = ""; - if (openMRSDrugOrder != null) { - localeSpecificName = openMRSDrugOrder.getDrug().getFullName(tempLocale); - bahmniDrugOrder.getDrugOrder().getDrug().setName(localeSpecificName); - } - } - - if((locale != null) && (openMRSDrugOrder.getFrequency().getConcept() != null) && (openMRSDrugOrder.getFrequency().getConcept().getPreferredName(new Locale((locale))) != null)) { - bahmniDrugOrder.getDrugOrder().getDosingInstructions().setFrequency(openMRSDrugOrder.getFrequency().getConcept().getPreferredName(new Locale((locale))).getName()); - } - bahmniDrugOrder.setVisit(openMRSDrugOrder.getEncounter().getVisit()); - bahmniDrugOrder.setProvider(providerMapper.map(openMRSDrugOrder.getOrderer())); - if(openMRSDrugOrder.getDrug() != null){ - bahmniDrugOrder.setRetired(openMRSDrugOrder.getDrug().getRetired()); - } - bahmniDrugOrder.setEncounterUuid(openMRSDrugOrder.getEncounter().getUuid()); - - bahmniDrugOrder.setCreatorName(openMRSDrugOrder.getCreator().getPersonName().toString()); - if(discontinuedOrderMap.containsKey(openMRSDrugOrder.getOrderNumber())){ - bahmniDrugOrder.setOrderReasonText(discontinuedOrderMap.get(openMRSDrugOrder.getOrderNumber()).getOrderReasonNonCoded()); - bahmniDrugOrder.setOrderReasonConcept(conceptMapper.map(discontinuedOrderMap.get(openMRSDrugOrder.getOrderNumber()).getOrderReason())); - } - + BahmniDrugOrder bahmniDrugOrder = mapDrugOrderToBahmniDrugOrder(openMRSDrugOrder, locale, discontinuedOrderMap); bahmniDrugOrders.add(bahmniDrugOrder); } if(CollectionUtils.isNotEmpty(orderAttributeObs)){ @@ -71,9 +42,44 @@ public List mapToResponse(List activeDrugOrders, return bahmniDrugOrders; } + private BahmniDrugOrder mapDrugOrderToBahmniDrugOrder(DrugOrder openMRSDrugOrder, String locale, Map discontinuedOrderMap) { + OrderMapper1_12 drugOrderMapper = new OrderMapper1_12(); + BahmniDrugOrder bahmniDrugOrder = new BahmniDrugOrder(); + bahmniDrugOrder.setDrugOrder(drugOrderMapper.mapDrugOrder(openMRSDrugOrder)); + if(locale != null) { + Locale tempLocale = new Locale(locale); + String localeSpecificName = ""; + if (openMRSDrugOrder != null) { + localeSpecificName = openMRSDrugOrder.getDrug().getFullName(tempLocale); + bahmniDrugOrder.getDrugOrder().getDrug().setName(localeSpecificName); + } + } + + if((locale != null) && (openMRSDrugOrder.getFrequency().getConcept() != null) && (openMRSDrugOrder.getFrequency().getConcept().getPreferredName(new Locale((locale))) != null)) { + bahmniDrugOrder.getDrugOrder().getDosingInstructions().setFrequency(openMRSDrugOrder.getFrequency().getConcept().getPreferredName(new Locale((locale))).getName()); + } + bahmniDrugOrder.setVisit(openMRSDrugOrder.getEncounter().getVisit()); + bahmniDrugOrder.setProvider(providerMapper.map(openMRSDrugOrder.getOrderer())); + if(openMRSDrugOrder.getDrug() != null){ + bahmniDrugOrder.setRetired(openMRSDrugOrder.getDrug().getRetired()); + } + bahmniDrugOrder.setEncounterUuid(openMRSDrugOrder.getEncounter().getUuid()); + + bahmniDrugOrder.setCreatorName(openMRSDrugOrder.getCreator().getPersonName().toString()); + if(discontinuedOrderMap.containsKey(openMRSDrugOrder.getOrderNumber())){ + bahmniDrugOrder.setOrderReasonText(discontinuedOrderMap.get(openMRSDrugOrder.getOrderNumber()).getOrderReasonNonCoded()); + bahmniDrugOrder.setOrderReasonConcept(conceptMapper.map(discontinuedOrderMap.get(openMRSDrugOrder.getOrderNumber()).getOrderReason())); + } + return bahmniDrugOrder; + } + public void setMappers(BahmniProviderMapper bahmniProviderMapper, OrderAttributesMapper orderAttributesMapper, ConceptMapper conceptMapper){ providerMapper = bahmniProviderMapper; this.orderAttributesMapper = orderAttributesMapper; this.conceptMapper = conceptMapper; } + + public BahmniDrugOrder mapToResponse(DrugOrder drugOrder, Map discontinuedDrugOrderMap) { + return mapDrugOrderToBahmniDrugOrder(drugOrder, null, discontinuedDrugOrderMap); + } } diff --git a/bahmnicore-api/src/main/java/org/bahmni/module/bahmnicore/service/BahmniDrugOrderService.java b/bahmnicore-api/src/main/java/org/bahmni/module/bahmnicore/service/BahmniDrugOrderService.java index 6d57f6a571..f483c45b88 100644 --- a/bahmnicore-api/src/main/java/org/bahmni/module/bahmnicore/service/BahmniDrugOrderService.java +++ b/bahmnicore-api/src/main/java/org/bahmni/module/bahmnicore/service/BahmniDrugOrderService.java @@ -38,4 +38,6 @@ List getInactiveDrugOrders(String patientUuid, Set concepts, List getDrugOrders(String patientUuid, Boolean isActive, Set conceptsToFilter, Set conceptsToExclude, String patientProgramUuid) throws ParseException; + + DrugOrder getDrugOrderByOrderId(String orderId); } diff --git a/bahmnicore-api/src/main/java/org/bahmni/module/bahmnicore/service/impl/BahmniDrugOrderServiceImpl.java b/bahmnicore-api/src/main/java/org/bahmni/module/bahmnicore/service/impl/BahmniDrugOrderServiceImpl.java index 2c9bb6faa8..e7631f8f1b 100644 --- a/bahmnicore-api/src/main/java/org/bahmni/module/bahmnicore/service/impl/BahmniDrugOrderServiceImpl.java +++ b/bahmnicore-api/src/main/java/org/bahmni/module/bahmnicore/service/impl/BahmniDrugOrderServiceImpl.java @@ -141,6 +141,13 @@ public List getDrugOrders(String patientUuid, Boolean isActive, } } + @Override + public DrugOrder getDrugOrderByOrderId(String orderId) { + Order order = orderDao.getOrderByUuid(orderId); + List drugOrders = mapOrderToDrugOrder(Collections.singletonList(order)); + return drugOrders.get(0); + } + @Override public List getPrescribedDrugOrdersForConcepts(Patient patient, Boolean includeActiveVisit, List visits, List concepts, Date startDate, Date endDate) { if( concepts == null || concepts.isEmpty()){ diff --git a/bahmnicore-api/src/test/java/org/bahmni/module/bahmnicore/dao/impl/OrderDaoImplIT.java b/bahmnicore-api/src/test/java/org/bahmni/module/bahmnicore/dao/impl/OrderDaoImplIT.java index f71b1f691d..54fb23f79d 100644 --- a/bahmnicore-api/src/test/java/org/bahmni/module/bahmnicore/dao/impl/OrderDaoImplIT.java +++ b/bahmnicore-api/src/test/java/org/bahmni/module/bahmnicore/dao/impl/OrderDaoImplIT.java @@ -20,12 +20,7 @@ import java.io.File; import java.net.URISyntaxException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Date; -import java.util.HashSet; -import java.util.List; +import java.util.*; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertTrue; diff --git a/bahmnicore-omod/src/main/java/org/bahmni/module/bahmnicore/web/v1_0/controller/BahmniDrugOrderController.java b/bahmnicore-omod/src/main/java/org/bahmni/module/bahmnicore/web/v1_0/controller/BahmniDrugOrderController.java index afc0306678..156f4b4d50 100644 --- a/bahmnicore-omod/src/main/java/org/bahmni/module/bahmnicore/web/v1_0/controller/BahmniDrugOrderController.java +++ b/bahmnicore-omod/src/main/java/org/bahmni/module/bahmnicore/web/v1_0/controller/BahmniDrugOrderController.java @@ -3,6 +3,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.apache.velocity.exception.ResourceNotFoundException; import org.bahmni.module.bahmnicore.service.BahmniDrugOrderService; import org.bahmni.module.bahmnicore.service.BahmniObsService; import org.bahmni.module.bahmnicore.util.BahmniDateUtil; @@ -17,10 +18,7 @@ import org.openmrs.module.webservices.rest.web.v1_0.controller.BaseRestController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.*; import java.io.IOException; import java.text.ParseException; @@ -129,6 +127,17 @@ public List getDrugOrderDetails(@RequestParam(value = "patientU return drugOrderService.getDrugOrders(patientUuid, isActive, drugConceptsToBeFiltered, drugConceptsToBeExcluded, patientProgramUuid); } + @RequestMapping(value = baseUrl + "/{orderId}", method = RequestMethod.GET) + @ResponseBody + public BahmniDrugOrder getDrugOrderByOrderId(@PathVariable String orderId) { + DrugOrder drugOrder = drugOrderService.getDrugOrderByOrderId(orderId); + Map discontinuedDrugOrderMap = drugOrderService.getDiscontinuedDrugOrders(Collections.singletonList(drugOrder)); + if (drugOrder == null) { + throw new ResourceNotFoundException("Drug order not found with orderId: " + orderId); + } + return bahmniDrugOrderMapper.mapToResponse(drugOrder, discontinuedDrugOrderMap); + } + Set getDrugConcepts(String drugConceptSetName){ if(drugConceptSetName == null) return null; Set drugConcepts = new HashSet<>(); diff --git a/bahmnicore-omod/src/test/java/org/bahmni/module/bahmnicore/web/v1_0/controller/BahmniDrugOrderControllerIT.java b/bahmnicore-omod/src/test/java/org/bahmni/module/bahmnicore/web/v1_0/controller/BahmniDrugOrderControllerIT.java index 7160ce7ac3..be74f6f69b 100644 --- a/bahmnicore-omod/src/test/java/org/bahmni/module/bahmnicore/web/v1_0/controller/BahmniDrugOrderControllerIT.java +++ b/bahmnicore-omod/src/test/java/org/bahmni/module/bahmnicore/web/v1_0/controller/BahmniDrugOrderControllerIT.java @@ -228,6 +228,13 @@ public void shouldReturnInactiveDrugOrderExceptForGivenConceptSet() throws Excep assertEquals("6d0ae116-ewrg-4629-9850-f15205e6bgoh", inactiveDrugOrders.get(0).getUuid()); } + @Test + public void shouldReturnDrugOrderByOrderId() throws Exception { + executeDataSet("prescribedAndActiveDrugOrdersForVisits.xml"); + BahmniDrugOrder drugOrder = bahmniDrugOrderController.getDrugOrderByOrderId("6d0ae116-707a-4629-9850-f15205e63ab0"); + assertEquals("6d0ae116-707a-4629-9850-f15205e63ab0", drugOrder.getUuid()); + } + private List getOrderUuids(List bahmniDrugOrders) { ArrayList orderUuids = new ArrayList<>(); for (BahmniDrugOrder drugOrder : bahmniDrugOrders) { diff --git a/bahmnicore-omod/src/test/java/org/bahmni/module/bahmnicore/web/v1_0/mapper/BahmniDrugOrderMapperTest.java b/bahmnicore-omod/src/test/java/org/bahmni/module/bahmnicore/web/v1_0/mapper/BahmniDrugOrderMapperTest.java index 8024e834b1..84d35ff3b8 100644 --- a/bahmnicore-omod/src/test/java/org/bahmni/module/bahmnicore/web/v1_0/mapper/BahmniDrugOrderMapperTest.java +++ b/bahmnicore-omod/src/test/java/org/bahmni/module/bahmnicore/web/v1_0/mapper/BahmniDrugOrderMapperTest.java @@ -256,4 +256,46 @@ public void shouldFillDrugOrderReasonTextAndReasonConcept() throws Exception { assertEquals("AEID1234", mappedOrder.getOrderReasonText()); verify(providerMapper, times(1)).map(null); } + + @Test + public void shouldMapDrugOrderToResponse() throws Exception { + DrugOrderBuilder drugBuilder = new DrugOrderBuilder(); + Date visitDate; + Date dateActivated; + visitDate = dateActivated = new Date(); + Date dateScheduled = DateUtils.addDays(dateActivated, 2); + Date expireDate = DateUtils.addDays(dateActivated, 20); + + + Person person = new PersonBuilder().withUUID("puuid").build(); + Encounter encounter = new EncounterBuilder().build(); + Visit visit = new VisitBuilder().withPerson(person).withUUID("vuuid").withStartDatetime(visitDate).withEncounter( + encounter).build(); + + DrugOrder drugOrder = drugBuilder.withDrugName("Paracetamol 120mg/5ml 60ml") + .withDosingType(FlexibleDosingInstructions.class) + .withDrugForm("Capsule") + .withScheduledDate(dateScheduled) + .withDateActivated(dateActivated) + .withDurationUnits("Week") + .withDosingInstructions("{\"dose\": \"2.0\", \"doseUnits\": \"Tablet\"}") + .withVisit(visit) + .withDuration(18) + .withAutoExpireDate(expireDate) + .withCreator("testPersonName") + .build(); + + BahmniDrugOrder mappedDrugOrder = bahmniDrugOrderMapper.mapToResponse(drugOrder, new HashMap()); + + assertEquals("Paracetamol 120mg/5ml 60ml", mappedDrugOrder.getDrug().getName()); + assertEquals("Capsule", mappedDrugOrder.getDrug().getForm()); + assertEquals(dateScheduled, mappedDrugOrder.getEffectiveStartDate()); + assertEquals(expireDate, mappedDrugOrder.getEffectiveStopDate()); + assertEquals(18, mappedDrugOrder.getDuration(), 0); + assertEquals("Week", mappedDrugOrder.getDurationUnits()); + assertEquals("vuuid", mappedDrugOrder.getVisit().getUuid()); + assertEquals("{\"dose\": \"2.0\", \"doseUnits\": \"Tablet\"}", mappedDrugOrder.getDosingInstructions().getAdministrationInstructions()); + assertEquals(visitDate, mappedDrugOrder.getVisit().getStartDateTime()); + verify(providerMapper, times(1)).map(null); + } }