use of org.folio.rest.jaxrs.model.PurchaseOrder in project mod-orders by folio-org.
the class PieceUpdateFlowInventoryManagerTest method shouldDeleteHoldingWhenElecPieceUpdateForPackagePoLineWithCreateInventoryAllAndPieceContainsNewHoldingAndTitleWithInstanceId.
@Test
void shouldDeleteHoldingWhenElecPieceUpdateForPackagePoLineWithCreateInventoryAllAndPieceContainsNewHoldingAndTitleWithInstanceId() {
String orderId = UUID.randomUUID().toString();
String holdingFromStorageId = UUID.randomUUID().toString();
String holdingId = UUID.randomUUID().toString();
String lineId = UUID.randomUUID().toString();
String titleId = UUID.randomUUID().toString();
String itemId = UUID.randomUUID().toString();
String pieceId = UUID.randomUUID().toString();
String instanceId = UUID.randomUUID().toString();
JsonObject holding = new JsonObject().put(ID, holdingFromStorageId);
holding.put(HOLDING_PERMANENT_LOCATION_ID, UUID.randomUUID().toString());
Title title = new Title().withId(titleId).withPoLineId(lineId).withInstanceId(instanceId);
Piece pieceFromStorage = new Piece().withId(pieceId).withTitleId(titleId).withItemId(itemId).withPoLineId(lineId).withHoldingId(holdingFromStorageId).withFormat(Piece.Format.ELECTRONIC);
Piece pieceToUpdate = new Piece().withId(pieceId).withTitleId(titleId).withItemId(itemId).withPoLineId(lineId).withHoldingId(holdingId).withFormat(Piece.Format.ELECTRONIC);
Location loc = new Location().withHoldingId(holdingId).withQuantityElectronic(1).withQuantity(1);
Cost cost = new Cost().withQuantityElectronic(1);
PoLine poLine = new PoLine().withIsPackage(true).withPurchaseOrderId(orderId).withId(lineId).withOrderFormat(PoLine.OrderFormat.ELECTRONIC_RESOURCE).withId(lineId).withEresource(new Eresource().withCreateInventory(Eresource.CreateInventory.INSTANCE_HOLDING_ITEM)).withLocations(List.of(loc)).withCost(cost);
PurchaseOrder purchaseOrder = new PurchaseOrder().withId(orderId).withWorkflowStatus(PurchaseOrder.WorkflowStatus.OPEN);
PieceUpdateHolder holder = new PieceUpdateHolder().withPieceToUpdate(pieceToUpdate).withPieceFromStorage(pieceFromStorage).withCreateItem(true).withDeleteHolding(true);
holder.withOrderInformation(purchaseOrder, poLine);
doReturn(completedFuture(title)).when(titlesService).getTitleById(pieceToUpdate.getTitleId(), requestContext);
doReturn(completedFuture(new JsonObject())).when(inventoryManager).getItemRecordById(pieceToUpdate.getItemId(), true, requestContext);
doReturn(completedFuture(List.of(itemId))).when(inventoryManager).createMissingElectronicItems(holder.getPoLineToSave(), pieceToUpdate, 1, requestContext);
doReturn(completedFuture(null)).when(inventoryManager).updateItemWithPieceFields(holder.getPieceToUpdate(), requestContext);
doReturn(completedFuture(holding)).when(inventoryManager).getHoldingById(holder.getPieceFromStorage().getHoldingId(), true, requestContext);
doReturn(completedFuture(new ArrayList())).when(inventoryManager).getItemsByHoldingId(holder.getPieceFromStorage().getHoldingId(), requestContext);
doReturn(completedFuture(null)).when(pieceUpdateInventoryService).deleteHoldingConnectedToPiece(holder.getPieceFromStorage(), requestContext);
doReturn(completedFuture(itemId)).when(pieceUpdateInventoryService).manualPieceFlowCreateItemRecord(pieceToUpdate, holder.getPoLineToSave(), requestContext);
pieceUpdateFlowInventoryManager.processInventory(holder, requestContext).join();
verify(titlesService).getTitleById(pieceToUpdate.getTitleId(), requestContext);
verify(inventoryManager, times(0)).getOrCreateHoldingsRecord(eq(holder.getInstanceId()), any(Location.class), eq(requestContext));
verify(pieceUpdateInventoryService).deleteHoldingConnectedToPiece(holder.getPieceFromStorage(), requestContext);
verify(inventoryManager).updateItemWithPieceFields(holder.getPieceToUpdate(), requestContext);
verify(pieceUpdateInventoryService).manualPieceFlowCreateItemRecord(pieceToUpdate, holder.getPoLineToSave(), requestContext);
}
use of org.folio.rest.jaxrs.model.PurchaseOrder in project mod-orders by folio-org.
the class PieceUpdateFlowPoLineServiceTest method shouldUpdateLineQuantityWithAddNeHoldingIfMixedPoLineIsNotPackageAndHoldingReferenceChanged.
@Test
void shouldUpdateLineQuantityWithAddNeHoldingIfMixedPoLineIsNotPackageAndHoldingReferenceChanged() throws ExecutionException, InterruptedException {
String orderId = UUID.randomUUID().toString();
String oldHoldingId = UUID.randomUUID().toString();
String holdingToUpdate = UUID.randomUUID().toString();
String lineId = UUID.randomUUID().toString();
String titleId = UUID.randomUUID().toString();
String itemId = UUID.randomUUID().toString();
String pieceId = UUID.randomUUID().toString();
Piece pieceFromStorage = new Piece().withId(pieceId).withPoLineId(lineId).withItemId(itemId).withTitleId(titleId).withHoldingId(oldHoldingId).withFormat(Piece.Format.ELECTRONIC);
Piece pieceToUpdate = new Piece().withId(pieceId).withPoLineId(lineId).withItemId(itemId).withTitleId(titleId).withHoldingId(holdingToUpdate).withFormat(Piece.Format.ELECTRONIC);
Cost cost = new Cost().withQuantityElectronic(1).withQuantityPhysical(1).withListUnitPrice(1d).withListUnitPriceElectronic(1d).withExchangeRate(1d).withCurrency("USD").withPoLineEstimatedPrice(1d);
Location loc = new Location().withHoldingId(oldHoldingId).withQuantityPhysical(1).withQuantityElectronic(1).withQuantity(2);
PoLine poLineFromStorage = new PoLine().withIsPackage(false).withPurchaseOrderId(orderId).withId(lineId).withOrderFormat(PoLine.OrderFormat.P_E_MIX).withEresource(new Eresource().withCreateInventory(INSTANCE_HOLDING)).withPhysical(new Physical().withCreateInventory(Physical.CreateInventory.INSTANCE_HOLDING_ITEM)).withLocations(List.of(loc)).withCost(cost);
PurchaseOrder purchaseOrderFromStorage = new PurchaseOrder().withId(orderId).withWorkflowStatus(PurchaseOrder.WorkflowStatus.OPEN);
PieceUpdateHolder incomingUpdateHolder = new PieceUpdateHolder().withPieceToUpdate(pieceToUpdate).withPieceFromStorage(pieceFromStorage);
incomingUpdateHolder.withOrderInformation(purchaseOrderFromStorage, poLineFromStorage);
ArgumentCaptor<CompositePoLine> poLineToSaveCapture = ArgumentCaptor.forClass(CompositePoLine.class);
doReturn(completedFuture(null)).when(purchaseOrderLineService).saveOrderLine(poLineToSaveCapture.capture(), eq(requestContext));
// When
pieceUpdateFlowPoLineService.updatePoLine(incomingUpdateHolder, requestContext).get();
// Then
CompositePoLine poLineToUpdate = poLineToSaveCapture.getValue();
assertEquals(holdingToUpdate, pieceToUpdate.getHoldingId());
assertNull(pieceToUpdate.getLocationId());
List<Location> locations = poLineToUpdate.getLocations();
assertEquals(2, locations.size());
Location physicalLocationToSave = poLineToUpdate.getLocations().stream().filter(location -> location.getQuantityPhysical() != null).findAny().get();
assertNull(physicalLocationToSave.getQuantityElectronic());
assertNull(physicalLocationToSave.getLocationId());
assertEquals(1, physicalLocationToSave.getQuantity());
assertEquals(oldHoldingId, physicalLocationToSave.getHoldingId());
Location elecLocationToSave = poLineToUpdate.getLocations().stream().filter(location -> location.getQuantityElectronic() != null).findAny().get();
assertNull(elecLocationToSave.getQuantityPhysical());
assertNull(elecLocationToSave.getLocationId());
assertEquals(1, elecLocationToSave.getQuantity());
assertEquals(holdingToUpdate, elecLocationToSave.getHoldingId());
Cost costToSave = poLineToUpdate.getCost();
assertEquals(1, costToSave.getQuantityElectronic());
assertEquals(1, costToSave.getQuantityPhysical());
verify(purchaseOrderLineService).saveOrderLine(incomingUpdateHolder.getPoLineToSave(), requestContext);
}
use of org.folio.rest.jaxrs.model.PurchaseOrder in project mod-orders by folio-org.
the class PieceUpdateFlowPoLineServiceTest method shouldUpdateLineQuantityWithAddNeHoldingIfMixedPoLineWith2LocationsIsNotPackageAndHoldingReferenceChanged.
@Test
void shouldUpdateLineQuantityWithAddNeHoldingIfMixedPoLineWith2LocationsIsNotPackageAndHoldingReferenceChanged() throws ExecutionException, InterruptedException {
String orderId = UUID.randomUUID().toString();
String oldHoldingId = UUID.randomUUID().toString();
String holdingToUpdate = UUID.randomUUID().toString();
String lineId = UUID.randomUUID().toString();
String titleId = UUID.randomUUID().toString();
String itemId = UUID.randomUUID().toString();
String pieceId = UUID.randomUUID().toString();
Piece pieceFromStorage = new Piece().withId(pieceId).withPoLineId(lineId).withItemId(itemId).withTitleId(titleId).withHoldingId(oldHoldingId).withFormat(Piece.Format.ELECTRONIC);
Piece pieceToUpdate = new Piece().withId(pieceId).withPoLineId(lineId).withItemId(itemId).withTitleId(titleId).withHoldingId(holdingToUpdate).withFormat(Piece.Format.ELECTRONIC);
Cost cost = new Cost().withQuantityElectronic(1).withQuantityPhysical(1).withListUnitPrice(1d).withListUnitPriceElectronic(1d).withExchangeRate(1d).withCurrency("USD").withPoLineEstimatedPrice(2d);
Location loc1 = new Location().withHoldingId(oldHoldingId).withQuantityElectronic(1).withQuantity(1);
Location loc2 = new Location().withHoldingId(oldHoldingId).withQuantityPhysical(1).withQuantity(1);
PoLine poLineFromStorage = new PoLine().withIsPackage(false).withPurchaseOrderId(orderId).withId(lineId).withOrderFormat(PoLine.OrderFormat.P_E_MIX).withEresource(new Eresource().withCreateInventory(INSTANCE_HOLDING)).withPhysical(new Physical().withCreateInventory(Physical.CreateInventory.INSTANCE_HOLDING_ITEM)).withLocations(List.of(loc1, loc2)).withCost(cost);
PurchaseOrder purchaseOrderFromStorage = new PurchaseOrder().withId(orderId).withWorkflowStatus(PurchaseOrder.WorkflowStatus.OPEN);
PieceUpdateHolder incomingUpdateHolder = new PieceUpdateHolder().withPieceToUpdate(pieceToUpdate).withPieceFromStorage(pieceFromStorage);
incomingUpdateHolder.withOrderInformation(purchaseOrderFromStorage, poLineFromStorage);
ArgumentCaptor<CompositePoLine> poLineToSaveCapture = ArgumentCaptor.forClass(CompositePoLine.class);
doReturn(completedFuture(null)).when(purchaseOrderLineService).saveOrderLine(poLineToSaveCapture.capture(), eq(requestContext));
// When
pieceUpdateFlowPoLineService.updatePoLine(incomingUpdateHolder, requestContext).get();
// Then
CompositePoLine poLineToUpdate = poLineToSaveCapture.getValue();
assertEquals(holdingToUpdate, pieceToUpdate.getHoldingId());
assertNull(pieceToUpdate.getLocationId());
List<Location> locations = poLineToUpdate.getLocations();
assertEquals(2, locations.size());
Location physicalLocationToSave = poLineToUpdate.getLocations().stream().filter(location -> location.getQuantityPhysical() != null).findAny().get();
assertNull(physicalLocationToSave.getQuantityElectronic());
assertNull(physicalLocationToSave.getLocationId());
assertEquals(1, physicalLocationToSave.getQuantity());
assertEquals(oldHoldingId, physicalLocationToSave.getHoldingId());
Location elecLocationToSave = poLineToUpdate.getLocations().stream().filter(location -> location.getQuantityElectronic() != null).findAny().get();
assertNull(elecLocationToSave.getQuantityPhysical());
assertNull(elecLocationToSave.getLocationId());
assertEquals(1, elecLocationToSave.getQuantity());
assertEquals(holdingToUpdate, elecLocationToSave.getHoldingId());
Cost costToSave = poLineToUpdate.getCost();
assertEquals(1, costToSave.getQuantityElectronic());
assertEquals(1, costToSave.getQuantityPhysical());
verify(purchaseOrderLineService).saveOrderLine(incomingUpdateHolder.getPoLineToSave(), requestContext);
}
use of org.folio.rest.jaxrs.model.PurchaseOrder in project mod-orders by folio-org.
the class PieceUpdateFlowPoLineServiceTest method shouldUpdateLineQuantityIfElectronicPoLineIsNotPackageAndHoldingReferenceChanged.
@Test
void shouldUpdateLineQuantityIfElectronicPoLineIsNotPackageAndHoldingReferenceChanged() throws ExecutionException, InterruptedException {
String orderId = UUID.randomUUID().toString();
String oldHoldingId = UUID.randomUUID().toString();
String newHoldingId = UUID.randomUUID().toString();
String lineId = UUID.randomUUID().toString();
String titleId = UUID.randomUUID().toString();
String itemId = UUID.randomUUID().toString();
String pieceId = UUID.randomUUID().toString();
Piece pieceFromStorage = new Piece().withId(pieceId).withPoLineId(lineId).withItemId(itemId).withTitleId(titleId).withHoldingId(oldHoldingId).withFormat(Piece.Format.ELECTRONIC);
Piece pieceToUpdate = new Piece().withId(pieceId).withPoLineId(lineId).withItemId(itemId).withTitleId(titleId).withHoldingId(newHoldingId).withFormat(Piece.Format.ELECTRONIC);
Cost cost = new Cost().withQuantityElectronic(1).withListUnitPriceElectronic(1d).withExchangeRate(1d).withCurrency("USD").withPoLineEstimatedPrice(1d);
Location loc = new Location().withHoldingId(oldHoldingId).withQuantityElectronic(1).withQuantity(1);
PoLine poLineFromStorage = new PoLine().withIsPackage(false).withPurchaseOrderId(orderId).withId(lineId).withEresource(new Eresource().withCreateInventory(Eresource.CreateInventory.INSTANCE_HOLDING_ITEM)).withOrderFormat(PoLine.OrderFormat.ELECTRONIC_RESOURCE).withLocations(List.of(loc)).withCost(cost);
PurchaseOrder purchaseOrderFromStorage = new PurchaseOrder().withId(orderId).withWorkflowStatus(PurchaseOrder.WorkflowStatus.OPEN);
PieceUpdateHolder incomingUpdateHolder = new PieceUpdateHolder().withPieceToUpdate(pieceToUpdate).withPieceFromStorage(pieceFromStorage);
incomingUpdateHolder.withOrderInformation(purchaseOrderFromStorage, poLineFromStorage);
ArgumentCaptor<CompositePurchaseOrder> purchaseOrderToSaveCapture = ArgumentCaptor.forClass(CompositePurchaseOrder.class);
ArgumentCaptor<CompositePoLine> poLineToSaveCapture = ArgumentCaptor.forClass(CompositePoLine.class);
doReturn(completedFuture(null)).when(purchaseOrderLineService).saveOrderLine(poLineToSaveCapture.capture(), eq(requestContext));
// When
pieceUpdateFlowPoLineService.updatePoLine(incomingUpdateHolder, requestContext).get();
// Then
CompositePoLine poLineToUpdate = poLineToSaveCapture.getValue();
assertNull(pieceToUpdate.getLocationId());
assertEquals(newHoldingId, pieceToUpdate.getHoldingId());
Location locationToSave = poLineToUpdate.getLocations().get(0);
Cost costToSave = poLineToUpdate.getCost();
assertNull(locationToSave.getLocationId());
assertEquals(1, locationToSave.getQuantityElectronic());
assertEquals(1, locationToSave.getQuantity());
assertEquals(pieceToUpdate.getHoldingId(), locationToSave.getHoldingId());
assertEquals(1, costToSave.getQuantityElectronic());
assertNull(costToSave.getQuantityPhysical());
assertNull(poLineFromStorage.getLocations().get(0).getLocationId());
assertEquals(oldHoldingId, poLineFromStorage.getLocations().get(0).getHoldingId());
verify(purchaseOrderLineService).saveOrderLine(incomingUpdateHolder.getPoLineToSave(), requestContext);
}
use of org.folio.rest.jaxrs.model.PurchaseOrder in project mod-orders by folio-org.
the class PieceUpdateFlowPoLineServiceTest method shouldUpdateLineQuantityWithAddNeLocationIfMixedPoLineIsNotPackageAndLocationReferenceChanged.
@Test
void shouldUpdateLineQuantityWithAddNeLocationIfMixedPoLineIsNotPackageAndLocationReferenceChanged() throws ExecutionException, InterruptedException {
String orderId = UUID.randomUUID().toString();
String oldHoldingId = UUID.randomUUID().toString();
String locationToUpdate = UUID.randomUUID().toString();
String lineId = UUID.randomUUID().toString();
String titleId = UUID.randomUUID().toString();
String itemId = UUID.randomUUID().toString();
String pieceId = UUID.randomUUID().toString();
Piece pieceFromStorage = new Piece().withId(pieceId).withPoLineId(lineId).withItemId(itemId).withTitleId(titleId).withHoldingId(oldHoldingId).withFormat(Piece.Format.ELECTRONIC);
Piece pieceToUpdate = new Piece().withId(pieceId).withPoLineId(lineId).withItemId(itemId).withTitleId(titleId).withLocationId(locationToUpdate).withFormat(Piece.Format.ELECTRONIC);
Cost cost = new Cost().withQuantityElectronic(1).withQuantityPhysical(1).withListUnitPrice(1d).withListUnitPriceElectronic(1d).withExchangeRate(1d).withCurrency("USD").withPoLineEstimatedPrice(1d);
Location loc = new Location().withHoldingId(oldHoldingId).withQuantityPhysical(1).withQuantityElectronic(1).withQuantity(2);
PoLine poLineFromStorage = new PoLine().withIsPackage(false).withPurchaseOrderId(orderId).withId(lineId).withOrderFormat(PoLine.OrderFormat.P_E_MIX).withEresource(new Eresource().withCreateInventory(INSTANCE)).withPhysical(new Physical().withCreateInventory(Physical.CreateInventory.INSTANCE_HOLDING_ITEM)).withLocations(List.of(loc)).withCost(cost);
PurchaseOrder purchaseOrderFromStorage = new PurchaseOrder().withId(orderId).withWorkflowStatus(PurchaseOrder.WorkflowStatus.OPEN);
PieceUpdateHolder incomingUpdateHolder = new PieceUpdateHolder().withPieceToUpdate(pieceToUpdate).withPieceFromStorage(pieceFromStorage);
incomingUpdateHolder.withOrderInformation(purchaseOrderFromStorage, poLineFromStorage);
ArgumentCaptor<CompositePoLine> poLineToSaveCapture = ArgumentCaptor.forClass(CompositePoLine.class);
doReturn(completedFuture(null)).when(purchaseOrderLineService).saveOrderLine(poLineToSaveCapture.capture(), eq(requestContext));
// When
pieceUpdateFlowPoLineService.updatePoLine(incomingUpdateHolder, requestContext).get();
// Then
CompositePoLine poLineToUpdate = poLineToSaveCapture.getValue();
assertEquals(locationToUpdate, pieceToUpdate.getLocationId());
assertNull(pieceToUpdate.getHoldingId());
List<Location> locations = poLineToUpdate.getLocations();
assertEquals(2, locations.size());
Location physicalLocationToSave = poLineToUpdate.getLocations().stream().filter(location -> location.getQuantityPhysical() != null).findAny().get();
assertNull(physicalLocationToSave.getQuantityElectronic());
assertNull(physicalLocationToSave.getLocationId());
assertEquals(1, physicalLocationToSave.getQuantity());
assertEquals(oldHoldingId, physicalLocationToSave.getHoldingId());
Location elecLocationToSave = poLineToUpdate.getLocations().stream().filter(location -> location.getQuantityElectronic() != null).findAny().get();
assertNull(elecLocationToSave.getQuantityPhysical());
assertNull(elecLocationToSave.getHoldingId());
assertEquals(1, elecLocationToSave.getQuantity());
assertEquals(locationToUpdate, elecLocationToSave.getLocationId());
Cost costToSave = poLineToUpdate.getCost();
assertEquals(1, costToSave.getQuantityElectronic());
assertEquals(1, costToSave.getQuantityPhysical());
verify(purchaseOrderLineService).saveOrderLine(incomingUpdateHolder.getPoLineToSave(), requestContext);
}
Aggregations