Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ Improvements:
to ensure notifications are returned in the correct language.
* [ODRC-101](https://openlmis.atlassian.net/browse/ODRC-101): Panel 'Number of Requisitions to be
created this month' on home page should not count emergency requisitions
* [OLMIS-7779](https://openlmis.atlassian.net/browse/OLMIS-7779): Add supplyingFacility query parameter to /api/requisitions/search.

Bug fixes:
* [MALAWISUP-7022](https://openlmis.atlassian.net/browse/MALAWISUP-7022): Fix /api/requisitions/search failing for users with many permissions (Postgres bind-parameter limit).
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,62 @@ public void testSearchRequisitionsByFacilityAndProgram() {
}
}

@Test
public void testSearchRequisitionsBySupplyingFacility() {
UUID matchingSupplyingFacility = UUID.randomUUID();
UUID otherSupplyingFacility = UUID.randomUUID();
Requisition requisitionToCopy = requisitions.get(0);

Requisition matchingRequisition = new RequisitionDataBuilder()
.withFacilityId(requisitionToCopy.getFacilityId())
.withProgramId(requisitionToCopy.getProgramId())
.withStatus(requisitionToCopy.getStatus())
.withSupervisoryNodeId(requisitionToCopy.getSupervisoryNodeId())
.withSupplyingFacilityId(matchingSupplyingFacility)
.withTemplate(testTemplate)
.withNumberOfMonthsInPeriod(1)
.withEmergency(true)
.buildAsNew();
matchingRequisition.setStatusChanges(
singletonList(new StatusChangeDataBuilder()
.withRequisition(matchingRequisition)
.buildAsNew()
)
);
repository.save(matchingRequisition);

Requisition otherRequisition = new RequisitionDataBuilder()
.withFacilityId(requisitionToCopy.getFacilityId())
.withProgramId(requisitionToCopy.getProgramId())
.withStatus(requisitionToCopy.getStatus())
.withSupervisoryNodeId(requisitionToCopy.getSupervisoryNodeId())
.withSupplyingFacilityId(otherSupplyingFacility)
.withTemplate(testTemplate)
.withNumberOfMonthsInPeriod(1)
.withEmergency(false)
.buildAsNew();
otherRequisition.setStatusChanges(
singletonList(new StatusChangeDataBuilder()
.withRequisition(otherRequisition)
.buildAsNew()
)
);
repository.save(otherRequisition);

RequisitionSearchParams searchParams = new DefaultRequisitionSearchParamsDataBuilder()
.withSupplyingFacility(matchingSupplyingFacility)
.build();

List<Requisition> receivedRequisitions = repository
.searchRequisitions(searchParams, userPermissionStrings, programNodePairs, pageRequest)
.getContent();

assertEquals(1, receivedRequisitions.size());
assertEquals(
matchingSupplyingFacility,
receivedRequisitions.get(0).getSupplyingFacilityId());
}

@Test
public void testSearchRequisitionsByAllParametersNull() {
RequisitionSearchParams searchParams = new DefaultRequisitionSearchParams();
Expand Down Expand Up @@ -1016,6 +1072,7 @@ public void searchShouldUseSortProperties() {
RequisitionSearchParams searchParams = new DefaultRequisitionSearchParams(
requisitionToCopy.getFacilityId(), requisitionToCopy.getProgramId(),
requisitionToCopy.getProcessingPeriodId(), requisitionToCopy.getSupervisoryNodeId(),
null,
requisitionToCopy.getEmergency(), null, null, null, null,
EnumSet.of(requisitionToCopy.getStatus()));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ public final class DefaultRequisitionSearchParams implements RequisitionSearchPa
private UUID program;
private UUID processingPeriod;
private UUID supervisoryNode;
private UUID supplyingFacility;

private Boolean emergency;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ public interface RequisitionSearchParams {

UUID getSupervisoryNode();

UUID getSupplyingFacility();

Boolean getEmergency();

LocalDate getInitiatedDateFrom();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ public class RequisitionRepositoryImpl
private static final String CREATED_DATE = "createdDate";
private static final String PROCESSING_PERIOD_ID = "processingPeriodId";
private static final String SUPERVISORY_NODE_ID = "supervisoryNodeId";
private static final String SUPPLYING_FACILITY_ID = "supplyingFacilityId";
private static final String AUTHORIZED_DATE = "authorizedDate";
private static final String MODIFIED_DATE = "modifiedDate";

Expand Down Expand Up @@ -476,6 +477,8 @@ private <T> CriteriaQuery<T> prepareQuery(CriteriaBuilder builder, CriteriaQuery
PROCESSING_PERIOD_ID, params.getProcessingPeriod());
predicate = addEqualFilter(predicate, builder, root,
SUPERVISORY_NODE_ID, params.getSupervisoryNode());
predicate = addEqualFilter(predicate, builder, root,
SUPPLYING_FACILITY_ID, params.getSupplyingFacility());
predicate = addInFilter(predicate, builder, root, STATUS, params.getRequisitionStatuses());
predicate = addEqualFilter(predicate, builder, root, EMERGENCY, params.getEmergency());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -347,7 +347,7 @@ private List<FacilityDto> getFacilitiesForTimelinessReport(
if (facility.getActive()) {
RequisitionSearchParams params = new DefaultRequisitionSearchParams(
facility.getId(), program.getId(), processingPeriod.getId(),
null, null, null, null, null, null, validStatuses);
null, null, null, null, null, null, null, validStatuses);

PageRequest pageRequest = PageRequest.of(Pagination.DEFAULT_PAGE_NUMBER,
Pagination.NO_PAGINATION);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,15 @@ final class QueryRequisitionSearchParams implements RequisitionSearchParams {
private static final String INITIATED_DATE_TO = "initiatedDateTo";
private static final String PROCESSING_PERIOD = "processingPeriod";
private static final String SUPERVISORY_NODE = "supervisoryNode";
private static final String SUPPLYING_FACILITY = "supplyingFacility";
private static final String REQUISITION_STATUS = "requisitionStatus";
private static final String EMERGENCY = "emergency";
private static final String MODIFIED_DATE_FROM = "modifiedDateFrom";
private static final String MODIFIED_DATE_TO = "modifiedDateTo";

private static final List<String> ALL_PARAMETERS = asList(FACILITY, PROGRAM, INITIATED_DATE_FROM,
INITIATED_DATE_TO, MODIFIED_DATE_FROM, MODIFIED_DATE_TO, PROCESSING_PERIOD,
SUPERVISORY_NODE, REQUISITION_STATUS, EMERGENCY);
SUPERVISORY_NODE, SUPPLYING_FACILITY, REQUISITION_STATUS, EMERGENCY);

private SearchParams queryParams;

Expand Down Expand Up @@ -146,6 +147,20 @@ public UUID getSupervisoryNode() {
return queryParams.getUuid(SUPERVISORY_NODE);
}

/**
* Gets {@link UUID} for "supplyingFacility" key from params.
*
* @return UUID value of supplyingFacility id
* or null if params doesn't contain "supplyingFacility" key.
*/
@Override
public UUID getSupplyingFacility() {
if (!queryParams.containsKey(SUPPLYING_FACILITY)) {
return null;
}
return queryParams.getUuid(SUPPLYING_FACILITY);
}

/**
* Gets {@link RequisitionStatus} for "requisitionStatus" key from params.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -558,7 +558,7 @@ public Page<RequisitionDto> getSubmittedRequisitions(Pageable pageable) {

profiler.start("SEARCH_REQUISITIONS");
RequisitionSearchParams params = new DefaultRequisitionSearchParams(
null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null,
EnumSet.of(RequisitionStatus.SUBMITTED));

Page<Requisition> submittedRequisitions = requisitionService
Expand Down
5 changes: 5 additions & 0 deletions src/main/resources/api-definition.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -743,6 +743,11 @@ resourceTypes:
type: string
required: false
repeat: false
supplyingFacility:
displayName: supplyingFacility
type: string
required: false
repeat: false
requisitionStatus:
displayName: supervisoryNode
type: string
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -519,7 +519,7 @@ private GeographicZoneDto mockGeographicZone(UUID districtId, String districtNam
(isMissingRnR) ? Collections.emptyList() : singletonList(mockRequisition));

RequisitionSearchParams params = new DefaultRequisitionSearchParams(
facilityId, program.getId(), period.getId(), null, null, null, null,
facilityId, program.getId(), period.getId(), null, null, null, null, null,
null, null, EnumSet.of(APPROVED, RELEASED, RELEASED_WITHOUT_ORDER));

when(requisitionService.searchRequisitions(eq(params), any()))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1297,6 +1297,7 @@ public void shouldFindRequisitionIfItExists() {
RequisitionSearchParams params = new DefaultRequisitionSearchParams(
requisition.getFacilityId(), requisition.getProgramId(),
requisition.getProcessingPeriodId(), requisition.getSupervisoryNodeId(),
null,
requisition.getEmergency(), requisition.getCreatedDate().minusDays(2).toLocalDate(),
requisition.getCreatedDate().plusDays(2).toLocalDate(),
requisition.getModifiedDate().minusDays(2), requisition.getModifiedDate().plusDays(2),
Expand Down Expand Up @@ -1359,6 +1360,7 @@ public void searchShouldReturnEmptyListIfPermissionStringsIsEmptyAndUserHasNoRol
final RequisitionSearchParams params = new DefaultRequisitionSearchParams(
requisition.getFacilityId(), requisition.getProgramId(),
requisition.getProcessingPeriodId(), requisition.getSupervisoryNodeId(),
null,
requisition.getEmergency(), requisition.getCreatedDate().minusDays(2).toLocalDate(),
requisition.getCreatedDate().plusDays(2).toLocalDate(),
requisition.getModifiedDate().minusDays(2), requisition.getModifiedDate().plusDays(2),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public class DefaultRequisitionSearchParamsDataBuilder implements
private UUID program;
private UUID processingPeriod;
private UUID supervisoryNode;
private UUID supplyingFacility;

private Boolean emergency;

Expand All @@ -52,6 +53,7 @@ public DefaultRequisitionSearchParams build() {
program,
processingPeriod,
supervisoryNode,
supplyingFacility,
emergency,
initiatedDateFrom,
initiatedDateTo,
Expand Down Expand Up @@ -81,6 +83,11 @@ public DefaultRequisitionSearchParamsDataBuilder withSupervisoryNode(UUID superv
return this;
}

public DefaultRequisitionSearchParamsDataBuilder withSupplyingFacility(UUID supplyingFacility) {
this.supplyingFacility = supplyingFacility;
return this;
}

public DefaultRequisitionSearchParamsDataBuilder withEmergency(Boolean emergency) {
this.emergency = emergency;
return this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ public class QueryRequisitionSearchParamsTest
private static final String INITIATED_DATE_TO = "initiatedDateTo";
private static final String PROCESSING_PERIOD = "processingPeriod";
private static final String SUPERVISORY_NODE = "supervisoryNode";
private static final String SUPPLYING_FACILITY = "supplyingFacility";
private static final String REQUISITION_STATUS = "requisitionStatus";
private static final String EMERGENCY = "emergency";
private static final String MODIFIED_DATE_FROM = "modifiedDateFrom";
Expand Down Expand Up @@ -160,6 +161,21 @@ public void shouldGetNullIfMapHasNoSupervisoryNodeProperty() {
assertNull(params.getSupervisoryNode());
}

@Test
public void shouldGetSupplyingFacilityValueFromParameters() {
queryMap.add(SUPPLYING_FACILITY, id.toString());
QueryRequisitionSearchParams params = new QueryRequisitionSearchParams(queryMap);

assertEquals(id, params.getSupplyingFacility());
}

@Test
public void shouldGetNullIfMapHasNoSupplyingFacilityProperty() {
QueryRequisitionSearchParams params = new QueryRequisitionSearchParams(queryMap);

assertNull(params.getSupplyingFacility());
}

@Test
public void shouldGetRequisitionStatusValueFromParameters() {
queryMap.add(REQUISITION_STATUS, RequisitionStatus.APPROVED.toString());
Expand Down Expand Up @@ -262,6 +278,7 @@ protected Optional<QueryRequisitionSearchParams> getInstance() {
protected void prepare(ToStringVerifier<QueryRequisitionSearchParams> verifier) {
verifier.ignore("FACILITY", "PROGRAM", "INITIATED_DATE_FROM", "INITIATED_DATE_TO",
"MODIFIED_DATE_FROM", "MODIFIED_DATE_TO", "PROCESSING_PERIOD",
"SUPERVISORY_NODE", "REQUISITION_STATUS", "EMERGENCY", "ALL_PARAMETERS");
"SUPERVISORY_NODE", "SUPPLYING_FACILITY", "REQUISITION_STATUS", "EMERGENCY",
"ALL_PARAMETERS");
}
}
Loading