Skip to content

Commit

Permalink
BAH-3745 | Add. Api To Fetch Order By Order Id (#262)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
parvathy00 authored May 15, 2024
1 parent cb42607 commit 1ae59c4
Show file tree
Hide file tree
Showing 7 changed files with 108 additions and 40 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,39 +30,10 @@ public List<BahmniDrugOrder> mapToResponse(List<DrugOrder> activeDrugOrders,
Map<String, DrugOrder> discontinuedOrderMap,
String locale) throws IOException {

OrderMapper1_12 drugOrderMapper = new OrderMapper1_12();

List<BahmniDrugOrder> 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)){
Expand All @@ -71,9 +42,44 @@ public List<BahmniDrugOrder> mapToResponse(List<DrugOrder> activeDrugOrders,
return bahmniDrugOrders;
}

private BahmniDrugOrder mapDrugOrderToBahmniDrugOrder(DrugOrder openMRSDrugOrder, String locale, Map<String, DrugOrder> 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<String, DrugOrder> discontinuedDrugOrderMap) {
return mapDrugOrderToBahmniDrugOrder(drugOrder, null, discontinuedDrugOrderMap);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,6 @@ List<DrugOrder> getInactiveDrugOrders(String patientUuid, Set<Concept> concepts,

List<BahmniDrugOrder> getDrugOrders(String patientUuid, Boolean isActive, Set<Concept> conceptsToFilter, Set<Concept> conceptsToExclude,
String patientProgramUuid) throws ParseException;

DrugOrder getDrugOrderByOrderId(String orderId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,13 @@ public List<BahmniDrugOrder> getDrugOrders(String patientUuid, Boolean isActive,
}
}

@Override
public DrugOrder getDrugOrderByOrderId(String orderId) {
Order order = orderDao.getOrderByUuid(orderId);
List<DrugOrder> drugOrders = mapOrderToDrugOrder(Collections.singletonList(order));
return drugOrders.get(0);
}

@Override
public List<DrugOrder> getPrescribedDrugOrdersForConcepts(Patient patient, Boolean includeActiveVisit, List<Visit> visits, List<Concept> concepts, Date startDate, Date endDate) {
if( concepts == null || concepts.isEmpty()){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -129,6 +127,17 @@ public List<BahmniDrugOrder> 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<String, DrugOrder> 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<Concept> getDrugConcepts(String drugConceptSetName){
if(drugConceptSetName == null) return null;
Set<Concept> drugConcepts = new HashSet<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<String> getOrderUuids(List<BahmniDrugOrder> bahmniDrugOrders) {
ArrayList<String> orderUuids = new ArrayList<>();
for (BahmniDrugOrder drugOrder : bahmniDrugOrders) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<String, DrugOrder>());

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);
}
}

0 comments on commit 1ae59c4

Please sign in to comment.