As a user you are able to setup the parcel accounts you would like to rate shop with (UPS, FedEx, DHL, etc.).  Follow the steps below to setup and execute rate shopping. 


Rate Shop Config

The first part is to setup your Rate Shop Config for the Parcel Accounts you want to be considered when Rate Shopping.  

Note: This is only for Parcel Accounts and not Third Party Parcel Accounts. 


  1. Go to the Rate Shop Config table (dot menu Rate Shop Config).
  2. Go into Edit mode.
  3. Click the Add button and it will take you to the Add Rate Shop Parcel Account screen.
  4. In the Parcel Account dropdown select the first account you want to add.  
  5. If you are adding more Parcel Account select Add Another and click Ok and the screen will refresh.  Add the next Parcel Account and repeat until you have added all of the needed Parcel Accounts.
  6. Once complete, click Save.

         



Performing Rate Shopping

Once you have your Rate Shop Config setup you are able to start rate shopping on Orders.  


  1. On the Order table, select the Order(s) you want to Rate Shop and select Rate Shop Orders from the Actions menu. Note: Based on the Carrier Service selected for the Order, Infoplus will rate shop either Ground, 1 Day or 2 Day services. You can also add the Carrier Services dedicated to Rate Shopping:
    • Rate Shop - Ground
    • Rate Shop - 1 Day
    • Rate Shop - 2 Day

  2. You will be taken to the Rate Shop Orders (Review) screen where it will show the Orders you are rate shopping and what service level that is going to be shopped for each Order:



  3. Hit Submit when ready and you will be taken to the Confirmation screen where you will be shown what carrier service was chosen because it was the cheapest. You will also see errors for Orders that you are unable to Rate Shop.



  4. Some examples on why you aren't able to Rate Shop:
  • If an order has a need by date
  • If an order has a deliver on date
  • If an order has a third party account associated with it
  • If an order is shipped
  • If an order is cancelled
  • If no parcel accounts have been setup in the rate shop config table
  • If the carrier for the order does not have an applicable service level for rate shopping
  • If an order is inserted without a rate shop carrier if that order matches a filter for a trigger that has a rate card action
  • If no rates were returned for an order



Rate Shop Trigger Action

A Rate Shop Trigger Action can be used to have orders automatically rate shopped upon insert or update. If a rate shop action is assigned to a trigger, then any orders matching the trigger's filter will automatically be rate shopped. For insert actions, this relies on the order being set to one of the three Rate Shop Carriers:

  • Rate Shop - Ground
  • Rate Shop - 1 Day
  • Rate Shop - 2 Day

If an order is not set to one of these three, or if any other error occurs during the automatic rate shop process, an alert will be created with details of the failure.  


         


To learn more on how to setup triggers, click here



Pre Cartonization Trigger Action

A Pre Cartonization Trigger Action can be used to have orders automatically run pre cartonization on insert or update.  If a pre cartonization action is assigned to a trigger, then any orders matching the trigger's filter will automatically be ran through pre cartonization.

If any other error occurs during the automatic pre cartonization process, an alert will be created with details of the failure.


       




Pre Cartonization Trigger Action Scripts

Scripts can be used for cartonization at three different points:

  • customizeAvailableCartons - Customize the cartons allowed for the given order during cartonization.
  • customizeCartonizationCall - Customize if Infoplus should run cartonization on the given order.
  • customizeCartonizationOutput - Customize the output of cartonization on the given order.


Example Script

// To customize Infoplus Cartonization, you can define the following functions, for customizing different pieces of the integration:
// customizeAvailableCartons - Customize the cartons allowed for the given order during cartonization.
// customizeCartonizationCall - Customize if Infoplus should run cartonization on the given order.
// customizeCartonizationOutput - Customize the output of cartonization on the given order.
//
// In each of these functions, the following global variables will be available:
//
// order - an instance of an Infoplus API Order model, for the order cartonization is being ran against.
//
// originalCartonList - object containing the list of Infoplus Carton API models availble by default.
//
// utils - object with the following methods:
//    .log(message) - add a line to the Script Output's log.
//    .getOriginalCartonList() - returns the original Carton list being passed into Cartonization.
//    .setOutputCartonList(cartonList) - sets the list of Cartons that will actually be used by Cartonization.
//    .setShouldRunCartonization(true/flase) - sets if Infoplus should run its internal Cartonization.
//
// infoplusApi - object which provides access to the Infoplus API, specifically, with the following methods:
//    .search(type, filter, pageNo, limit, orderBy) - run a search query in the Infoplus API.
//    .getById(type, id) - get the record of the specified type identified by the id.
//    .getTags(type, id) - get the tags from Infoplus for the specified record.
//    .constructModel(type) - used to construct an API model object of the given type.
//        - See the https://developer.infopluscommerce.com/ for more details.
//
// Example:
 
 
////////////////////////////////////////////////////////////////////////////
// customizeAvailableCartons
//
////////////////////////////////////////////////////////////////////////////
function customizeAvailableCartons()
{
   utils.log("Starting customizeAvailableCartons");
   utils.log("Running for Order: " + order.orderNo);
 
   ////////////////////////////////
   // set the output carton list //
   ////////////////////////////////
   var originalCartonList = utils.originalCartonList;
   utils.setOutputCartonList(originalCartonList);
}
 
 
////////////////////////////////////////////////////////////////////////////
// customizeCartonizationCall
//
////////////////////////////////////////////////////////////////////////////
function customizeCartonizationCall()
{
   utils.log("Starting customizeCartonizationCall");
   utils.log("Running for Order: " + order.orderNo);
   utils.setShouldRunCartonization(true);
}
 
 
////////////////////////////////////////////////////////////////////////////
// customizeCartonizationOutput
//
////////////////////////////////////////////////////////////////////////////
function customizeCartonizationOutput()
{
   utils.log("Starting customizeCartonizationOutput");
   utils.log("Running for Order1: " + order.orderNo);
 
   var cartonizationOutput = utils.cartonizationOutput;
   cartonizationOutput.clearCartons();
 
   var allContents = cartonizationOutput.getAllContents();
   utils.log("allContents: " + allContents);
    
   var carton1 = utils.createNewContainer(318);
 
   for(var i=0; i<allContents.size(); i++)
   {
      var cartonizationItem = cartonizationOutput.getAllContents().get(i);
 
      utils.log("cartonizationItem1: " + cartonizationItem);
      carton1.addContent(cartonizationItem);
   }
}