Skip to content
Open
8 changes: 6 additions & 2 deletions src/main/java/org/folio/config/ApplicationConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -425,10 +425,14 @@ HoldingsSummaryService holdingsSummaryService(PurchaseOrderStorageService purcha
}

@Bean
HoldingDetailService holdingsDetailService(PurchaseOrderLineService purchaseOrderLineService,
HoldingDetailService holdingsDetailService(ConsortiumConfigurationService consortiumConfigurationService,
ConsortiumUserTenantsRetriever consortiumUserTenantsRetriever,
SettingsRetriever settingsRetriever,
PurchaseOrderLineService purchaseOrderLineService,
PieceStorageService pieceStorageService,
InventoryItemManager inventoryItemManager) {
return new HoldingDetailService(purchaseOrderLineService, pieceStorageService, inventoryItemManager);
return new HoldingDetailService(consortiumConfigurationService, consortiumUserTenantsRetriever, settingsRetriever,
purchaseOrderLineService, pieceStorageService, inventoryItemManager);
}

@Bean
Expand Down
65 changes: 65 additions & 0 deletions src/main/java/org/folio/models/HoldingDetailAggregator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package org.folio.models;

import io.vertx.core.json.JsonObject;
import org.apache.commons.lang3.StringUtils;
import org.folio.rest.jaxrs.model.Piece;
import org.folio.rest.jaxrs.model.PoLine;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lombock can be used

public class HoldingDetailAggregator {

private String tenant;
private Map<String, List<PoLine>> poLinesByHoldingId = new HashMap<>();
private Map<String, List<Piece>> piecesByHoldingId = new HashMap<>();
private Map<String, List<JsonObject>> itemsByHoldingId = new HashMap<>();

public String getTenant() {
return tenant;
}

public Map<String, List<PoLine>> getPoLinesByHoldingId() {
return poLinesByHoldingId;
}

public Map<String, List<Piece>> getPiecesByHoldingId() {
return piecesByHoldingId;
}

public Map<String, List<JsonObject>> getItemsByHoldingId() {
return itemsByHoldingId;
}

public String getPieceTenantIdByItemId(String itemId) {
if (Objects.isNull(itemId)) {
return null;
}
return piecesByHoldingId.values().stream()
.flatMap(List::stream)
.filter(Objects::nonNull)
.filter(piece -> StringUtils.equals(itemId, piece.getItemId()))
.map(Piece::getReceivingTenantId)
.filter(Objects::nonNull)
.findFirst()
.orElse(null);
}

public void setTenant(String tenant) {
this.tenant = tenant;
}

public void setPoLinesByHoldingId(Map<String, List<PoLine>> poLines) {
this.poLinesByHoldingId = Objects.requireNonNullElse(poLines, new HashMap<>());
}

public void setPiecesByHoldingId(Map<String, List<Piece>> pieces) {
this.piecesByHoldingId = Objects.requireNonNullElse(pieces, new HashMap<>());
}

public void setItemsByHoldingId(Map<String, List<JsonObject>> items) {
this.itemsByHoldingId = Objects.requireNonNullElse(items, new HashMap<>());
}
}
10 changes: 0 additions & 10 deletions src/main/java/org/folio/models/HoldingDetailHolder.java

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,14 @@
import org.folio.service.pieces.PieceUtil;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;

import static java.util.stream.Collectors.toList;
import static one.util.streamex.StreamEx.ofSubLists;
import static org.folio.orders.utils.HelperUtils.collectResultsOnSuccess;
import static org.folio.orders.utils.QueryUtils.convertIdsToCqlQuery;
import static org.folio.rest.RestConstants.MAX_IDS_FOR_GET_RQ_15;
Expand Down Expand Up @@ -266,8 +268,8 @@ private List<String> getItemsByMaterialType(List<JsonObject> existingItems, Stri
.collect(toList());
}

private List<Piece> buildPieces(Location location, PoLine poLine, Piece.Format pieceFormat, List<String> createdItemIds,
List<String> existingItemIds) {
private List<Piece> buildPieces(Location location, PoLine poLine, Piece.Format pieceFormat,
List<String> createdItemIds, List<String> existingItemIds) {
List<String> itemIds = ListUtils.union(createdItemIds, existingItemIds);
logger.info(BUILDING_PIECE_MESSAGE, itemIds.size(), pieceFormat, poLine.getId());
return StreamEx.of(itemIds).map(itemId -> openOrderBuildPiece(poLine, itemId, pieceFormat, location)).toList();
Expand Down Expand Up @@ -309,6 +311,17 @@ public Future<List<JsonObject>> getItemsByHoldingId(String holdingId, RequestCon
});
}

public Future<List<JsonObject>> getItemsByHoldingIds(List<String> holdingIds, RequestContext requestContext) {
var futures = ofSubLists(new ArrayList<>(holdingIds), MAX_IDS_FOR_GET_RQ_15)
.map(holdingIdsChunk -> convertIdsToCqlQuery(holdingIdsChunk, ITEM_HOLDINGS_RECORD_ID))
.map(query -> getItemRecordsByQuery(query, requestContext))
.toList();
return collectResultsOnSuccess(futures)
.map(lists -> StreamEx.of(lists)
.flatMap(Collection::stream)
.toList());
}

public Future<String> openOrderCreateItemRecord(CompositePurchaseOrder compPO, PoLine poLine,
String holdingId, RequestContext requestContext) {
final int ITEM_QUANTITY = 1;
Expand Down
Loading