Skip to content

Commit

Permalink
[MODORDERS-1133] - Add support of creating holding in member tenants …
Browse files Browse the repository at this point in the history
…for Receiving (#964)

[MODORDERS-1133] - Add support of creating holding in member tenants for Receiving
  • Loading branch information
imerabishvili authored Jun 17, 2024
1 parent 75914aa commit 92616ca
Show file tree
Hide file tree
Showing 12 changed files with 292 additions and 204 deletions.
10 changes: 8 additions & 2 deletions src/main/java/org/folio/helper/BindHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -251,11 +251,17 @@ protected Map<String, List<Piece>> updatePieceRecordsWithoutItems(Map<String, Li

@Override
protected String getHoldingId(Piece piece) {
return "";
return StringUtils.EMPTY;
}

@Override
protected String getLocationId(Piece piece) {
return "";
return StringUtils.EMPTY;
}

@Override
protected String getReceivingTenantId(Piece piece) {
return StringUtils.EMPTY;
}

}
55 changes: 11 additions & 44 deletions src/main/java/org/folio/helper/CheckinHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import org.folio.rest.jaxrs.model.ReceivingResult;
import org.folio.rest.jaxrs.model.ReceivingResults;
import org.folio.rest.jaxrs.model.ToBeCheckedIn;
import org.folio.service.inventory.InventoryUtils;

import java.util.ArrayList;
import java.util.Collection;
Expand All @@ -33,16 +34,6 @@
import static java.util.stream.Collectors.mapping;
import static java.util.stream.Collectors.toList;
import static org.folio.orders.utils.HelperUtils.collectResultsOnSuccess;
import static org.folio.service.inventory.InventoryItemManager.COPY_NUMBER;
import static org.folio.service.inventory.InventoryItemManager.ITEM_ACCESSION_NUMBER;
import static org.folio.service.inventory.InventoryItemManager.ITEM_BARCODE;
import static org.folio.service.inventory.InventoryItemManager.ITEM_CHRONOLOGY;
import static org.folio.service.inventory.InventoryItemManager.ITEM_DISCOVERY_SUPPRESS;
import static org.folio.service.inventory.InventoryItemManager.ITEM_DISPLAY_SUMMARY;
import static org.folio.service.inventory.InventoryItemManager.ITEM_ENUMERATION;
import static org.folio.service.inventory.InventoryItemManager.ITEM_LEVEL_CALL_NUMBER;
import static org.folio.service.inventory.InventoryItemManager.ITEM_STATUS;
import static org.folio.service.inventory.InventoryItemManager.ITEM_STATUS_NAME;

public class CheckinHelper extends CheckinReceivePiecesHelper<CheckInPiece> {

Expand Down Expand Up @@ -176,7 +167,8 @@ public Map<String, List<CheckInPiece>> getItemCreateNeededCheckinPieces(CheckinC
protected Future<Boolean> receiveInventoryItemAndUpdatePiece(JsonObject item, Piece piece, RequestContext locationContext) {
Promise<Boolean> promise = Promise.promise();
CheckInPiece checkinPiece = getByPiece(piece);
checkinItem(item, checkinPiece, locationContext)
InventoryUtils.updateItemWithCheckinPieceFields(item, checkinPiece);
inventoryItemManager.updateItem(item, locationContext)
// Update Piece record object with check-in details if item updated
// successfully
.map(v -> {
Expand All @@ -198,6 +190,9 @@ private void updatePieceWithCheckinInfo(Piece piece) {
piece.setDisplaySummary(checkinPiece.getDisplaySummary());
piece.setComment(checkinPiece.getComment());

if (StringUtils.isNotEmpty(checkinPiece.getReceivingTenantId())) {
piece.setReceivingTenantId(checkinPiece.getReceivingTenantId());
}
if (StringUtils.isNotEmpty(checkinPiece.getLocationId())) {
piece.setLocationId(checkinPiece.getLocationId());
}
Expand Down Expand Up @@ -289,39 +284,6 @@ private Map<String, Boolean> groupCheckinPiecesByPoLineId(CheckinCollection chec
return orderClosedStatusesMap;
}

private Future<Void> checkinItem(JsonObject itemRecord, CheckInPiece checkinPiece, RequestContext locationContext) {

// Update item record with checkIn details
itemRecord.put(ITEM_STATUS, new JsonObject().put(ITEM_STATUS_NAME, checkinPiece.getItemStatus().value()));

if (StringUtils.isNotEmpty(checkinPiece.getDisplaySummary())) {
itemRecord.put(ITEM_DISPLAY_SUMMARY, checkinPiece.getDisplaySummary());
}
if (StringUtils.isNotEmpty(checkinPiece.getEnumeration())) {
itemRecord.put(ITEM_ENUMERATION, checkinPiece.getEnumeration());
}
if (StringUtils.isNotEmpty(checkinPiece.getCopyNumber())) {
itemRecord.put(COPY_NUMBER, checkinPiece.getCopyNumber());
}
if (StringUtils.isNotEmpty(checkinPiece.getChronology())) {
itemRecord.put(ITEM_CHRONOLOGY, checkinPiece.getChronology());
}
if (StringUtils.isNotEmpty(checkinPiece.getBarcode())) {
itemRecord.put(ITEM_BARCODE, checkinPiece.getBarcode());
}
if (StringUtils.isNotEmpty(checkinPiece.getAccessionNumber())) {
itemRecord.put(ITEM_ACCESSION_NUMBER, checkinPiece.getAccessionNumber());
}
if (StringUtils.isNotEmpty(checkinPiece.getCallNumber())) {
itemRecord.put(ITEM_LEVEL_CALL_NUMBER, checkinPiece.getCallNumber());
}
if (checkinPiece.getDiscoverySuppress() != null) {
itemRecord.put(ITEM_DISCOVERY_SUPPRESS, checkinPiece.getDiscoverySuppress());
}

return inventoryItemManager.updateItem(itemRecord, locationContext);
}

@Override
protected String getLocationId(Piece piece) {
return getByPiece(piece).getLocationId();
Expand All @@ -332,6 +294,11 @@ protected String getHoldingId(Piece piece) {
return getByPiece(piece).getHoldingId();
}

@Override
protected String getReceivingTenantId(Piece piece) {
return getByPiece(piece).getReceivingTenantId();
}

@Override
protected boolean isRevertToOnOrder(Piece piece) {
return piece.getReceivingStatus() == Piece.ReceivingStatus.RECEIVED && isOnOrderPieceStatus(getByPiece(piece));
Expand Down
14 changes: 12 additions & 2 deletions src/main/java/org/folio/helper/CheckinReceivePiecesHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import org.folio.rest.tools.utils.TenantTool;
import org.folio.service.ProtectionService;
import org.folio.service.inventory.InventoryHoldingManager;
import org.folio.service.inventory.InventoryInstanceManager;
import org.folio.service.inventory.InventoryItemManager;
import org.folio.service.orders.PurchaseOrderLineService;
import org.folio.service.pieces.PieceStorageService;
Expand Down Expand Up @@ -104,6 +105,8 @@ public abstract class CheckinReceivePiecesHelper<T> extends BaseHelper {
@Autowired
protected InventoryItemManager inventoryItemManager;
@Autowired
protected InventoryInstanceManager inventoryInstanceManager;
@Autowired
protected PieceStorageService pieceStorageService;
@Autowired
protected PurchaseOrderLineService purchaseOrderLineService;
Expand Down Expand Up @@ -396,6 +399,8 @@ private boolean isMissingLocation(PoLine poLine, Piece piece) {
return false;
}

protected abstract String getReceivingTenantId(Piece piece);

protected abstract String getHoldingId(Piece piece);

protected abstract String getLocationId(Piece piece);
Expand Down Expand Up @@ -506,11 +511,15 @@ private Future<Boolean> createHoldingsForChangedLocations(Piece piece, String in
return Future.succeededFuture(true);
}

String receivingTenantId = getReceivingTenantId(piece);
String locationId = getLocationId(piece);
String holdingId = getHoldingId(piece);
logger.info("createHoldingsForChangedLocations:: receivingTenantId: {} locationId: {} holdingId: {}",
receivingTenantId, locationId, holdingId);
Location location = new Location().withLocationId(locationId).withHoldingId(holdingId);
var locationContext = RequestContextUtil.createContextWithNewTenantId(requestContext, piece.getReceivingTenantId());
return inventoryHoldingManager.getOrCreateHoldingsRecord(instanceId, location, locationContext)
var locationContext = RequestContextUtil.createContextWithNewTenantId(requestContext, receivingTenantId);
return inventoryInstanceManager.createShadowInstanceIfNeeded(instanceId, locationContext)
.compose(instance -> inventoryHoldingManager.getOrCreateHoldingsRecord(instanceId, location, locationContext))
.compose(createdHoldingId -> {
processedHoldings.put(holdingKey, createdHoldingId);
piece.setHoldingId(createdHoldingId);
Expand Down Expand Up @@ -622,6 +631,7 @@ private Future<Map<String, List<Piece>>> processItemsUpdate(Map<String, List<Pie
if (title == null)
continue;

// holdingUpdateOnCheckinReceiveRequired
if (holdingUpdateOnCheckinReceiveRequired(piece, poLine) && !isRevertToOnOrder(piece)) {
String holdingKey = buildProcessedHoldingKey(piece, title.getInstanceId());
String holdingId = processedHoldings.get(holdingKey);
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/org/folio/helper/ExpectHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -143,4 +143,10 @@ protected String getHoldingId(Piece piece) {
protected String getLocationId(Piece piece) {
return StringUtils.EMPTY;
}

@Override
protected String getReceivingTenantId(Piece piece) {
return StringUtils.EMPTY;
}

}
50 changes: 8 additions & 42 deletions src/main/java/org/folio/helper/ReceivingHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.folio.rest.jaxrs.model.ReceivingResults;
import org.folio.rest.jaxrs.model.ToBeReceived;
import org.folio.service.ProtectionService;
import org.folio.service.inventory.InventoryUtils;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.Date;
Expand All @@ -32,14 +33,6 @@
import static java.util.stream.Collectors.toList;
import static org.folio.orders.utils.ResourcePathResolver.RECEIVING_HISTORY;
import static org.folio.orders.utils.ResourcePathResolver.resourcesPath;
import static org.folio.service.inventory.InventoryItemManager.COPY_NUMBER;
import static org.folio.service.inventory.InventoryItemManager.ITEM_BARCODE;
import static org.folio.service.inventory.InventoryItemManager.ITEM_CHRONOLOGY;
import static org.folio.service.inventory.InventoryItemManager.ITEM_DISPLAY_SUMMARY;
import static org.folio.service.inventory.InventoryItemManager.ITEM_ENUMERATION;
import static org.folio.service.inventory.InventoryItemManager.ITEM_LEVEL_CALL_NUMBER;
import static org.folio.service.inventory.InventoryItemManager.ITEM_STATUS;
import static org.folio.service.inventory.InventoryItemManager.ITEM_STATUS_NAME;

public class ReceivingHelper extends CheckinReceivePiecesHelper<ReceivedItem> {

Expand Down Expand Up @@ -179,7 +172,8 @@ private Map<String, Map<String, ReceivedItem>> groupReceivedItemsByPoLineId(Rece
@Override
protected Future<Boolean> receiveInventoryItemAndUpdatePiece(JsonObject item, Piece piece, RequestContext locationContext) {
ReceivedItem receivedItem = getByPiece(piece);
return receiveItem(item, receivedItem, locationContext)
InventoryUtils.updateItemWithReceivedItemFields(item, receivedItem);
return inventoryItemManager.updateItem(item, locationContext)
// Update Piece record object with receiving details if item updated
// successfully
.map(v -> {
Expand Down Expand Up @@ -232,39 +226,6 @@ private void updatePieceWithReceivingInfo(Piece piece) {
}
}

/**
* Returns list of item records for specified id's.
*
* @param itemRecord item record
* @param receivedItem item details specified by user upon receiving flow
* @return future with list of item records
*/
private Future<Void> receiveItem(JsonObject itemRecord, ReceivedItem receivedItem, RequestContext locationContext) {
// Update item record with receiving details
itemRecord.put(ITEM_STATUS, new JsonObject().put(ITEM_STATUS_NAME, receivedItem.getItemStatus().value()));

if (StringUtils.isNotEmpty(receivedItem.getDisplaySummary())) {
itemRecord.put(ITEM_DISPLAY_SUMMARY, receivedItem.getDisplaySummary());
}
if (StringUtils.isNotEmpty(receivedItem.getEnumeration())) {
itemRecord.put(ITEM_ENUMERATION, receivedItem.getEnumeration());
}
if (StringUtils.isNotEmpty(receivedItem.getCopyNumber())) {
itemRecord.put(COPY_NUMBER, receivedItem.getCopyNumber());
}
if (StringUtils.isNotEmpty(receivedItem.getChronology())) {
itemRecord.put(ITEM_CHRONOLOGY, receivedItem.getChronology());
}
if (StringUtils.isNotEmpty(receivedItem.getBarcode())) {
itemRecord.put(ITEM_BARCODE, receivedItem.getBarcode());
}
if (StringUtils.isNotEmpty(receivedItem.getCallNumber())) {
itemRecord.put(ITEM_LEVEL_CALL_NUMBER, receivedItem.getCallNumber());
}

return inventoryItemManager.updateItem(itemRecord, locationContext);
}

@Override
protected String getLocationId(Piece piece) {
return getByPiece(piece).getLocationId();
Expand All @@ -275,6 +236,11 @@ protected String getHoldingId(Piece piece) {
return getByPiece(piece).getHoldingId();
}

@Override
protected String getReceivingTenantId(Piece piece) {
return StringUtils.EMPTY;
}

@Override
protected boolean isRevertToOnOrder(Piece piece) {
return piece.getReceivingStatus() == Piece.ReceivingStatus.RECEIVED && isOnOrderItemStatus(getByPiece(piece));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,11 +142,11 @@ public Future<Void> updateItemWithPieceFields(Piece piece, RequestContext reques
String poLineId = piece.getPoLineId();
return getItemRecordById(itemId, true, requestContext)
.compose(item -> {
if (poLineId != null && item != null && !item.isEmpty()) {
updateItemWithPieceFields(piece, item);
return updateItem(item, requestContext);
if (poLineId == null || item == null || item.isEmpty()) {
return Future.succeededFuture();
}
return Future.succeededFuture();
InventoryUtils.updateItemWithPieceFields(item, piece);
return updateItem(item, requestContext);
});
}

Expand Down Expand Up @@ -336,11 +336,8 @@ public Future<List<String>> createMissingElectronicItems(CompositePoLine compPOL
}
String holdingId = piece.getHoldingId();
return buildElectronicItemRecordJsonObject(compPOL, holdingId, requestContext)
.map(item -> {
updateItemWithPieceFields(piece, item);
return item;
})
.compose(item -> {
InventoryUtils.updateItemWithPieceFields(item, piece);
logger.debug("Posting {} electronic item(s) for PO Line with '{}' id", quantity, compPOL.getId());
return createItemRecords(item, quantity, requestContext);
});
Expand All @@ -366,11 +363,8 @@ public Future<List<String>> createMissingPhysicalItems(CompositePoLine compPOL,
}
String holdingId = piece.getHoldingId();
return buildPhysicalItemRecordJsonObject(compPOL, holdingId, requestContext)
.map(item -> {
updateItemWithPieceFields(piece, item);
return item;
})
.compose(item -> {
InventoryUtils.updateItemWithPieceFields(item, piece);
logger.debug("Posting {} physical item(s) for PO Line with '{}' id", quantity, compPOL.getId());
return createItemRecords(item, quantity, requestContext);
});
Expand Down Expand Up @@ -442,31 +436,4 @@ private List<JsonObject> extractEntities(JsonObject entries) {
.orElseGet(List::of);
}

void updateItemWithPieceFields(Piece piece, JsonObject item) {
if (StringUtils.isNotEmpty(piece.getDisplaySummary())) {
item.put(ITEM_DISPLAY_SUMMARY, piece.getDisplaySummary());
}
if (StringUtils.isNotEmpty(piece.getEnumeration())) {
item.put(ITEM_ENUMERATION, piece.getEnumeration());
}
if (StringUtils.isNotEmpty(piece.getCopyNumber())) {
item.put(COPY_NUMBER, piece.getCopyNumber());
}
if (StringUtils.isNotEmpty(piece.getChronology())) {
item.put(ITEM_CHRONOLOGY, piece.getChronology());
}
if (StringUtils.isNotEmpty(piece.getBarcode())) {
item.put(ITEM_BARCODE, piece.getBarcode());
}
if (StringUtils.isNotEmpty(piece.getAccessionNumber())) {
item.put(ITEM_ACCESSION_NUMBER, piece.getAccessionNumber());
}
if (StringUtils.isNotEmpty(piece.getCallNumber())) {
item.put(ITEM_LEVEL_CALL_NUMBER, piece.getCallNumber());
}
if (piece.getDiscoverySuppress() != null) {
item.put(ITEM_DISCOVERY_SUPPRESS, piece.getDiscoverySuppress());
}
}

}
Loading

0 comments on commit 92616ca

Please sign in to comment.