Next-generation platform

Implementing inventory move with move requests

A store associate can use the information in the move request to pick products from a source location and place them in the destination location.

Solution

Understand APIs, services, and other components that are used to implement the inventory move flow.

Portlet scan

In the Move inventory portlet, you can view the move requests. The portlet displays the count of not started or new, in progress, and total of these two move requests. The portlet also supports ad hoc move where you can move inventory without creating a prior move request. The portlet is visible only if you have permission. The Start adhoc move button is visible only if Create adhoc move request resource permission is enabled. To fetch the total count, the SIMAPI - {tenantId}/stores/{storeId}/move-requests:summarize?groupBy=status is called.

When you click the total numbers, the Move request list page is displayed. When you click Not started, you can view move requests that are in Not started status. When you click In progress, you can view move requests that are in In progress status. When you click Total, you can view both not started and in progress move requests.

Move request list page

The Move request list page displays open move requests that are not started or in-progress status in the store. Depending on how you go from the portlet, move requests that are not started, in-progress, or both are listed. To fetch the move requests, the GET on SIM API - {tenantId}/v1/stores/{storeId}/move-requests?status={statuses}&fields=totalRequestedQuantity is called. By default, move requests are sorted in the order of oldest to newest. The open move requests are fetched in one call, which means the backend calls are not paginated. The Move request list page shows pagination and at a time 15 move requests are displayed. Sorting the move requests from newest to oldest sorts the move requests based on the createdTimestamp attribute.

For move requests, filters such as assigned store associate, status, and move type are supported.

Move type is further categorized into the following types:
  • General - both source and target or destination location is specified at the time of move request creation.
  • Putaway - only the source location is specified and the application stamps a putaway target or destination location based on the configured inventory dedications at the time of inventory move process.
  • Replenishment - a target or dedicated location is specified and the application stamps the source location based on where the inventory is available.
  • ad hoc - a move request is not created beforehand. But, inventory is moved as decided by the store associate.

On applying a filter, the GET on SIM API - {tenantId}/v1/stores/{storeId}/move-requests?assignedToUserId={userId}&status={statuses}&type={moveTypes}&fields=requestedProducts is called to retrieve the list of filtered move requests.

Click the move ID link to go to the summary page. For a move request that is not started, the Move button is displayed. When you click this button, you are taken to the move execution flow. For a move request that is in in-progress status, the Continue button is displayed.

Move process flow

When you click the Move button, the PATCH on SIM-API {tenantId}/v1/stores/{storeId}/move-requests/{moveRequestId} is called to update the AssignedToUserId field as the current user. If a move request is started by another store associate and is in progress status, an appropriate message is displayed. You can assign the move request to yourself and continue. Otherwise, you remain in the Move request list page.

To fetch move tasks in the move request page, the GET on SIM API {tenantId}/v1/stores/{storeId}/move-requests/{moveRequestId}?fields=moveTasks is called. This API call is part of the custom mashup, which also appends the product information to the move request object by calling the getCompleteItemList API.

Move request involves picking of products from the source location and depositing them in the target location. The picking page displays move tasks that are grouped by source location. Whereas the deposit page displays move tasks that are grouped by the destination or target location. In the move request list page, when you click the Move or Continue button, and if picking is not yet started or in progress, the picking page is displayed. If picking is completed, an appropriate message is displayed. You can go to the deposit page and deposit the picked products.

For move requests, the following rules are configured:
  • Is location scan mandatory before scanning any product rule enabled. For more information about this rule, see stores-rule API in Configuring move inventory.
    • If location scan is mandatory, before marking the product as picked or deposited, first scan the source or deposit location. Then, scan the product.
    • If location scan is not mandatory, directly scan the products to move without scanning the location.
  • Is manual movement rule enabled to mark inventory as picked or deposited without scanning the product. This rule is based driven through Manually update quantity while picking or depositing in Move inventory resource permission. If this resource permission is allowed, you can view the minus and plus buttons. Also, the quantity text box is editable. You can edit the picked or deposited quantity by using these widgets instead of scanning the product.

When you scan a bar code, the translateBarcode API is called. If a location is scanned, the scanned location is defaulted as the current location. If a product is scanned, and location scan is mandated, the matching move task is identified by using the location and product. If found, the move task is marked as picked by calling the POST on SIM API - {tenantId}/v1/stores/{storeId}/move-requests/{moveRequestId}/move-tasks/{moveTaskId}/pick. Otherwise, an error message is displayed. If location scanned is not mandatory, you can scan the product without scanning the source location. In the pick page, on scanning the product, the product is marked as picked. In the deposit page, on scanning the product, it is marked as deposited.

When you click the minus widget, the picked or deposited quantity is reduced by one unit. POST on SIM API - {tenantId}/v1/stores/{storeId}/move-requests/{moveRequestId}/move-tasks/{moveTaskId}/undo-pick or {tenantId}/v1/stores/{storeId}/move-requests/{moveRequestId}/move-tasks/{moveTaskId}/undo-deposit is called on this action. On click of plus widget, the picked or deposited quantity is increased by one unit. POST on SIM API - {tenantId}/v1/stores/{storeId}/move-requests/{moveRequestId}/move-tasks/{moveTaskId}/pick or {tenantId}/v1/stores/{storeId}/move-requests/{moveRequestId}/move-tasks/{moveTaskId}/pick is called on this action. You can manually modify the picked or deposited quantity as well. In this case, depending on whether the quantity is increased or decreased, the SIM pick or undo-pick API is called.

For a serial tracked item, the plus and quantity text box widgets are disabled. To mark a product as picked or deposited, scan the serial number. To undo-pick or undo-deposit, click the minus widget. A window opens where you can scan the serial number to remove the picked or deposited serials. On scan, the translateBarcode API is called with BarcodeType=Serial and then POST on {tenantId}/v1/stores/{storeId}/move-requests/{moveRequestId}/move-tasks/{moveTaskId}/undo-pick or {tenantId}/v1/stores/{storeId}/move-requests/{moveRequestId}/move-tasks/{moveTaskId}/undo-deposit API is called.

You can record shortage only in the pick flow and not in the deposit flow. Record shortage opens window where reasons are listed and the unpicked quantities are marked as shorted. The shortage reasons are fetched by calling GET on SIM API - {tenantId}/v1/exception-codes?activity=MOVE&storeId={storeId} and shortage is marked by calling POST on SIM API - {tenantId}/v1/stores/{storeId}/move-requests/{moveRequestId}/move-tasks/{moveTaskId}/exceptions.
  • If you mark all the products as shorted, the move request is automatically canceled.
  • If you pick all the products, an appropriate message is displayed. You can go to the deposit page where the API call on bar code scan, minus widget, plus widget and edit of quantity text box are same as explained earlier in this section.

If a destination, deposit, or target location is not stamped on the move request, you can select a destination location. The GET on SIM API - {tenantId}/v1/stores/{storeId}/move-requests/{moveRequestId}/move-tasks/{moveTaskId}/alternate-target-locations is called to fetch dedicated locations for the product. You can select any dedicated location. If dedicated locations are not available, you can scan or select any other location. If the selected location is full or not reachable, you can select an alternate location by clicking the alternate location link. The GET on SIM API - {tenantId}/v1/stores/{storeId}/move-requests/{moveRequestId}/move-tasks/{moveTaskId}/alternate-target-locations is called that displays the list of dedicated locations for the selected product. You can also select any other location to deposit the product. To display other locations other than the dedicated locations, the GET on {tenantId}/v1/stores/{storeId}/locations is called.

Before you select an alternate deposit location for the move task, you must select a reason. The reasons are fetched by calling GET on SIM API - {tenantId}/v1/exception-codes?activity=MOVE&storeId={storeId}. Another move task with a new alternate location is created by calling POST on SIM API - {tenantId}/v1/stores/{storeId}/move-requests/{moveRequestId}/move-tasks/{moveTaskId}/exceptions. The new move task displays the quantity that is not yet deposited.

To cancel move requests that are not started or in-progress status, call the Cancel Move Request API. Optionally, you can pass the exceptionCode and exceptionReason attributes in the API request to capture the exception code and description for canceling the move request. The cancelAllApplicableProductQuantity flag is used to cancel any product quantity or serials without having to pass the quantity or serials attribute in the requestedProducts API request. For more information about canceling move requests, see the Cancel Move Request API.

Move summary page

After you deposit all the products, the move request is marked as completed and the Move summary page is displayed. After you complete a move request, you cannot make further changes. To fetch the move request details, the GET on SIM API {tenantId}/v1/stores/{storeId}/move-requests/{moveRequestId} is called. The getCompleteItemList API is also called within the same custom mashup to fetch the product details.