Legacy platform

Pack orders

A store associate should be able to pack the products that are backroom picked and are ready for packing or partially packed.

Solution

The following section describes APIs, user exits, services, and other components.

A store associate can start the packing process from the Pack Orders portlet in the Order Fulfillment view.
Note: The store associate can perform packing for both sales order and transfer order shipments.
Pack Orders Portlet
On the Pack Orders portlet, a store associate can start the packing process in the following ways:
  • The store associate can click the In Progress count to view shipments that are in the Packing in Progress status. Similarly, clicking the Not Started count displays the shipments that are in the Ready for Packing status. Alternatively, the store associate can click the count displayed at the center of the portlet to view the complete list of shipments to be packed. In all the scenarios, the Pack order list screen is displayed.
  • A store associate can also scan or enter the product ID to start the packing process. The translatebar code API is called to translate the product bar code to product ID. Alternatively, a store associate can use the Advanced Search option to search for orders or shipments by using order number, shipment number or user ID for shipments assigned to a particular store associate. If the search results in a single shipment, the store associate is taken directly to the Pack Order screen. If the search results in multiple orders, the Pack order list screen is displayed with a list of orders that match the search criteria.

Packing can be performed only for shipments in the Ready for Packing or Packing in Progress status. If a shipment does not meet these criteria, an appropriate message is displayed before proceeding to the task. The getShipmentList API is called to validate and retrieve shipments for packing.

A store associate can also choose to filter the shipments based on Carrier and Status. Additionally, the store associate can also sort the shipments based on the Expected Ship date. The getShipmentList API is called to sort and filter the shipments based on the selected options.

From the Pack order list screen, the store associate can select a shipment and click Pack Order or Continue Pack.

Pack Order or Continue Pack
When the store associate clicks Pack Order, the changeShipmentStatus API is called to change the status of the shipment from Ready for Packing to Packing in Progress. The changeShipment API is called to assign the shipment to the logged-in user. The getShipmentDetails API fetches the shipment details such as the shipment number, status, staging location, allowed transactions, and so on.

If the store associate clicks Continue Pack, the shipment is assigned to the logged-in user.

If the shipment is already assigned to a different store associate and the status of the shipment is Packing in Progress, the current store associate is prompted to start over, continue, or cancel. If the store associate chooses to start over, then the unpackShipment API is called to remove each of the existing packages associated with the order. The changeShipment API is called to assign the shipment to the logged-in user.

Pack Order screen: Products panel
  • On the Pack Order screen, the getShipmentLineList API is called to list the products that are yet to be packed for a shipment. The panel displays the count of the products and each product displays the product ID, packable quantity, Pack and Record Shortage options. The getCompleteItemList API is called internally to display variation products.
  • If there is a shortage for a product, the store associate can click Record Shortage and select an appropriate shortage reason for the shorted quantity. The getCommonCodeList API is called with the CodeType as YCD_PACK_SHORT_RESOL to retrieve the shortage reasons. By default, only Inventory Shortage is provided as the shortage reason. When the store associate clicks OK, the recordShortageForPack API is called to record the shortage for the product.
  • The store associate can click the information icon on a product to view the packing instructions.
Pack Order screen: Packages panel
  • The getShipmentContainerList API is called to display the package count, the list of packages for the shipment and the current package. If the shipment does not have any packages, the generateSCM API is called to generate SCM and create a draft container.
  • After adding products to the draft container, a store associate can choose to add remaining products to new packages. When the store associate clicks Add Package, the generateSCM API is called to generate SCM and the new package is considered as the current package.
  • This API is used to paint the list of packages / containers in the shipment. This API is called in multiple places to get the updated list of containers after a specific action is done in the screen

  • The store associate can either scan the products or enter the product ID manually to add the products to a package. If the product scanned does not belong to the shipment or the bar code is invalid, an appropriate error message is displayed. The registerbar codeForPacking API validates whether the scanned product is part of the shipment and has packable quantity or not. If yes, the product is added to the currently selected container. The registerbar codeForPacking API internally calls the translatebar code and changeShipment APIs. The translatebar code API translates the bar code to product details. The changeShipment API updates the package details by using SCM for a new package and ShipmentContainerKey for an existing package.
  • During packing, the store associate can scan a product once and may choose to update the remaining quantity manually either by entering the quantity or by using the - and + buttons. If an invalid quantity is entered in the quantity field, an appropriate error message is displayed. The Update button is displayed only when a valid quantity is entered or modified manually. When the store associate clicks Update, the changeShipment API is called to update the quantity of the product in the package. Similarly, the store associate can repeat the procedure to pack products one at a time.
  • The store associate can click Pack All to pack all products into the package at once. The changeShipment API is called to pack all the products to the current package. However, a store associate with appropriate resource permissions can only perform this action.
  • For a given package, the Weight field is displayed with the default weight UOM of the store locale. The store associate can enter the weight of each package. When the weight is entered or modified, the store associate must click Update. The changeShipment API is called to save the weight of the package.
    Note: When a new product is added or removed or the quantity of a product is changed in a package, the package weight is reset.
  • Tracking Number and Generating Labels
    • The Generate Label button is displayed for a package, only when a carrier is integrated with the application. After entering the weight of the package and updating, the store associate can click Generate Label. The StoreContainerLabel_94 service is called, which in turn calls the getTrackingNoAndPrintLabel API that communicates with the carrier server to retrieve the tracking number and labels for the package. If the getTrackingNoAndPrintLabel API returns the FailedContainers element, then the tracking number is not generated for the package and an appropriate message is displayed.

      Whenever there is a change made to a container like adding a new product, changing the quantity of a product in the container, deleting the container, updating weight, and so on, the voidTrackingNumber API is called to void the previously generated tracking number. The changeShipment API is called to update the shipment to indicate that the pack process in not complete.

      When the store associate clicks Finish Pack, the getShipmentContainerList API is called to retrieve a list of packages to ensure packing is complete and the output of the API is used to perform the following validations:
      • Determine whether the shipment is packed, not packed, or partially packed and display an appropriate message.
      • Determine whether the shipment is stamped with a carrier that is integrated with the application or not.
      • If the total number of packages returned by the API is zero, the changeShipmentStatus API is called to change the status of the shipment to Packed and the changeShipment API is called to update the shipment attributes and mark the packing process as complete.
    • The Generate Label button is not displayed for a package when the carrier is not integrated. When the store associate enters the weight for a package and saves the changes, the changeShipment API is called to save the weight for the package. When the store associate clicks Finish Pack, the getShipmentContainerList API is called to retrieve a list of packages to ensure packing is complete and the output of the API is used to perform the following validations:
      • Determine whether the shipment is packed, not packed, or partially packed and display an appropriate message.
      • If the total number of packages returned by the API is zero, the changeShipmentStatus API is called to change the status of the shipment to Packed and the changeShipment API is called to update the shipment attributes and mark the packing process as complete.
    • Re-print Label: If the tracking number is generated and shipping labels are printed successfully, the Generate Label button is not displayed. Instead, a Re-print Label button is displayed. When the store associate clicks Re-print Label, the StoreLabelReprint_94 service is called, which in turn calls the reprintCarrierLabel API to reprint the labels.
    • Print Packing Slip: When the store associate clicks Print Packing Slip, the StorePackSlip_173 service is called to print the contents of the current container.
    • Unpack: When the store associate clicks the Update button, a prompt is displayed to confirm unpacking. If the store associate clicks Yes, the unpackShipment API is called to delete the package. The most recently created package is considered as the current package. If there are no packages, a new package is considered as the current package.

    The getShipmentContainerList API is called whenever a store associate performs actions such as adding and deleting packages. Additionally, before packing is completed, the API is called to retrieve packages that do not have weight and tracking number, if carrier integration is enabled.

    Note: Starting with Release 9.4 of the application, weighing scales that are connected through USB and pass the weight information identical to the data entered using a keyboard are supported. The store associate must set the focus on the weight field before the weight information is sent over. Refer your specific scale documentation to configure the output of the weight data from the scale.

Implementation

  • The store associate must have the following resource permissions:
    • Pack Order: Enables a store associate to perform the packing process.
    • Unpack products: Enables a store associate to unpack a shipment.
    • Print Pack slip: Enables a store associate to print the packing slip for the current package.
    • Pack All: Enables a store associate pack all the remaining products in a shipment at once.
    • Manually update quantity while packing: Enables a store associate to manually enter the package quantity and use the - and + buttons to edit the package quantity.
    For more information about administering user group permissions, see Administering user group permissions.
  • You must enable the following modification types for shipments in the Packing in Progress and Packed status.
    • Add/Remove Container
    • Pack Shipment
    • Delete Shipment
    • Unpack Shipment
    • Remove Line
    • Change Other Attributes
    For more information about configuring Modification Types, see Defining status modification rules.
  • Configure Parcel Carrier Preferences appropriately. For more information, see Manage parcel carrier preferences.
  • You must configure the service level indicators for shipping orders. For more information, see Configure service level indicators.
  • You must enable Package Level Integration for a carrier service. For more information, see Defining carrier services for parcel shipments. You must not toggle between Shipment Level Integration and Package Level Integration as the behavior of the feature changes entirely and you cannot ship packages successfully.
  • You can configure the packing instructions at the product level or shipment line level. Shipment line packing instruction takes precedence over product instruction. The Instruction Type must to be Pack. If there are multiple instructions, then the last packing instruction is displayed. For more information about managing instructions, see IBM Sterling Business Center item administration overview.
  • Configure Pack Shipment Shortage Resolutions appropriately. By default, Inventory Shortage is available as the shortage resolution for the default organization. If you want to use the same shortage resolution for a new enterprise, you must either inherit the default organization's properties or use the following values to create shortage resolutions by using the Sterling Business Center.
    • Inventory Shortage
      • Shortage Resolution: inventoryShortage
      • Shortage Resolution Name: Inventory Shortage
    For more information, see Manage pack shipment shortage resolutions. To inherit default organization's properties, see Defining an enterprise's primary information. If you create custom shortage resolutions, then you must have corresponding implementation as well.
  • The following print services are provided by default:
    • The StorePackSlip_173 service uses StorePackSlip_173_multiApi.xsl.sample and StorePackSlip_173_output.xsl.sample templates to print pack slips.
    • The StoreContainerLabel_94 service uses StoreContainerLabel_94_input.xsl.sample and StoreContainerLabel_94_output.xsl.sample templates to print shipping labels.
    • The StoreLabelReprint_94 service uses StoreLabelReprint_94_input.xsl.sample and StoreLabelReprint_94_output.xsl.sample templates to reprint shipping labels.

    The input or multi API XSLs are used to call multiple APIs that retrieve the information to be printed, while the output XSLs are used to format the API output as HTML content. The templates are present in the /template/prints/ycd/xsl/ directory. The templates are provided as sample implementation and suffixed with .sample. You can continue to use the sample templates or rename them to remove .sample from the file names and customize as required.

  • For information about carrier integration, see Defining carrier services for parcel shipments.

    To implement carrier integration, see Carrier server integration.

Configuring bar code types

You must configure bar code types for your store organization. The following bar code types are used in the application:
  • Item to translate product bar code to product ID.
  • Store Outbound Shipment. Used in the pack orders portlet to find the matching shipment or order. The bar code should have following sources configured:
    • Shipment: External service. The bar code validation source is YCD_Translate_bar code_InboundShipment.
    • Order: External service. The bar code validation source is YCD_Translate_bar code_OrderNo.
By default, bar code types are provided for the default organization. When you set up a new enterprise, these bar code types must be created again or copied from the Default organization. For more information, see Configuring bar codes.

For more information about the APIs, see IBM® Sterling Order Management System: Javadoc.