New features included in this release

  • Dispatch Board Enhancements: 
    • The Route feature is enhanced to show: 
      • Fixed stops on route
      • Service Level display 
    • The Dispatch Board Grid is enhanced with: 
      • Ability to filter by Reference Numbers or User fields
      • Modification to how status and vehicle are filtered
  • Administration Enhancements:
    • Calendar feature is available for the Company and Accounts as well as in the Recurrence order template. 
    • More secure User Password Policy management
    • Locking out all Customer Portal and Back Office users, as well as Drivers after 3 failed login attempts 
    • Creation of order segments automatically using the Scripts 
  • API Enhancements: 
    • Route Plan management 
    • Manage exceptions at the recurrence order template level

Other new features

  • Ability to add segments to a template used in a recurrence 
  • Addition of a new column for Attribute IDs in the Import file. For more information on this addition to the Import file, please review article Import Orders using Standard Mapping File.


IMPORTANT NOTE
Tenant Integration API Order Template:
The following obsolete properties will be removed in version 1.48 and should be changed if used with the new properties that were added:

PickupDayOffset - to be changed to: PickupFromDayOffset and PickupToDayOffset

DeliveryDayOffset - to be changed to: DeliveryFromDayOffset and DeliveryToDayOffset
    ODATA: The following obsolete properties will be removed in version 1.48 and should be changed if used with the new properties that were added: NameEn - to be changed to: NamePrimary NameFr - to be changed to: NameSecondary

 

Driver App features

  • Dark mode support
  • License Plate feature 
  • New widgets for Android


About the new calendar feature
Holidays, which were previously setup under Settings > Configuration > System > Holidays, are removed in this version and the calendar feature will now be used. In version 1.46, a copy of the holidays were added to the calendar called Holidays. If any changes were made to Holidays after May 3rd when version 1.46 was deployed, those changes must be done to the default Holidays calendar as well. 


Locking user account after 3 failed attempts
Please review the release notes on Logins below. 

Internal and external users as well as Drivers will be locked out of Dispatch Science/Driver App after 3 failed login attempts.


Definition

The release notes refer to different sections of the application:

Back Office: Where Customer Service Representatives (CSR) create and edit orders, create accounts, review drivers, etc.

Dispatch Board: Where Dispatchers assign orders to drivers, get notifications for invalid orders, etc.

Auto-Dispatch: This section refers to the automated order assignment setup and its process.

Administration: This section is in the Back Office but refers to sections only an administrator will use like Settings and Pricing.

Customer Portal: Where account users log in to create orders, view their order history, enter a credit card, etc.

Tracking site: Where customers enter a tracking number like the order ID or a reference number to view the status of their order.

OData: Data fields and variables saved in OData

Account API: API provided to your accounts to create, update and get orders. For documentation, please follow this link:https://api.dispatchscience.com/
Tenant API: API provided to you to create orders for your accounts, retrieve invoices and change invoice status. For documentation, please follow this link: https://api.dispatchscience.com/  



Driver App Version 1.47

Features

Dark Mode Support

When phone is set to Dark Mode, the Driver App will switch to Dark Mode as well:

Android                                          iPhone




Widgets on Android

You can now add 3 widgets on Android pertaining to your Driver App:

1) Number of orders not accepted with the option to accept all

2) Number of Orders by status (Not Accepted, Accepted, Picked Up, Delivered)

3) Next Stop


Checkpoint Feature Modification

On the Warehouse module in the Driver App, the Checkpoint is now under the new + then selecting Checkpoint.





License Plate Feature

This new feature allows drivers to group orders together under a License Plate to speed up the checkpoint/pickup/delivery by scanning the License Plate barcode to select all orders items that were scanned under the License Plate. 


Create a License Plate

1) On the Driver App, tap on Warehouse module and tap on +  Icon. In the next window, tap on License Plate:

2) In the License Plate, scan a License Plate barcode.


License Plate barcodes must start with the prefix 'DSP' to be recognized.
If the License Plate was already created, Driver will be asked if the License Plate should be modified otherwise the License Plate will be created.


3) Scan the items to be added to the License Plate. Items can be Order parcels and/or a License Plate

As items are scanned, you will notice the number of items increase.
You can review the items by tapping on See Items and remove any items that should not have been scanned by tapping its trash can. 

Tap on OK to return to the scan window.

4)  Once all items/license plates are scanned, tap on Complete. 



If  one or more orders was partially scanned, Driver will be asked if partial orders should be included. 


There are no check done on the items, and therefore orders, that are scanned into a license plate therefore it is up to the person who is scanning to ensure that the items scanned are for the same driver




Edit a License Plate

1) On the Driver App, tap on Warehouse icon and tap on + sign. In the next window, tap on License Plate:

2) In the License Plate, scan a License Plate barcode.

3) You will be asked if the License Plate should be edited, tap Yes.

4) You will be in the Scan window. 

   a) Scan additional packages or license plates to add new items/license plates

   b) Tap on items to see the list and use the trash can to delete scanned items from the License Plate.

5) Tap on Complete when done. 


Delete a License Plate

1) On the Driver App, tap on Warehouse icon and tap on + sign. In the next window, tap on License Plate:

2) In the License Plate, scan a License Plate barcode.

3) Tap on trash can beside license plate number to delete the license plate. You will be asked to confirm deletion.


Using License Plate when adding a Checkpoint and Picking up and Delivering Orders

The process will be transparent to the Driver. 

When a driver or warehouse worker scans a License plate at a checkpoint, all items added to the License Plate will be selected and checkpoint will be added to these items. 


When a driver scans a License plate at pickup or delivery in a grouped order, all items will be selected to be picked up or delivered. 



When an item that belongs to a License Plate is scanned, user will be advised that the item belongs to a License Plate and to scan it, the License Plate must be broken.

When a License Plate is scanned in a single stop and the item is part of a License Plate, user will be advised that the item is part of a License Plate and to scan it, the License Plate must be broken.


Login to Dispatch Science/Driver App

A maximum of 3 failed login attempts are now allowed on Dispatch Science and the Driver App.  After 3 failed logins, the user/drivers will be locked out of Dispatch Science/Driver App for 30 minutes. User may change their password if their login is linked to a real email address themselves or they request to have their passwords reset by an authorized internal user and this will unlock their account without the 30 minutes wait.

This applies Internal and External Users.


Drivers will need to request from an authorized internal user to have his password changed.


Once a user password is changed, it should also be changed in any API call that generates from that user otherwise the user will keep getting locked out.


Back Office

Accounts

Holiday Calendar

By default, the calendar associated to the Account's Company will be used on orders to calculate the pickup and delivery windows/Holiday extra fee according to the service level selected on the order. 

A different calendar can be selected at the Account level if the holidays differ from the default Company calendar. In this case, the Account's Holiday calendar will be used to perform the window/extra fee calculation.


Setup the Holiday Calendar

1) Open Accounts.

2) In the list of Accounts, click on the Account to modify.

3) Click Edit in the Order Options section:

4) In the Order Options section, select a calendar in the Holiday Calendar drop-down:

5) Click Save

For more information on how to setup a new calendar, please review New Features for Release 1.46 under Administration > Calendar.


Recurrences

Using Calendars

In version 1.46 (New Features for Release 1.46), the calendars were made available to add to the Exceptions on the recurrence. In version 1.47, the calendars are also available to be added on the Recurrence Order template as Exceptions for excluding dates.

Add a Calendar to a Recurrence Order Template

1) Open Orders, Recurrences and click on a recurrence.

2) In the recurrence, scroll down to the list of order templates and click on Exception button

3) In the Calendar drop-down, select the desired calendar and click the Add button. The calendar will be added

You can continue selecting calendars and/or dates and add those as exclusions.

4) Once done, click on Save.

5) Click on Save on the upper right to save those changes



Dispatch Board


Routes


Fixed Stops on the Routes 

Dispatcher will be able to set a number of fixed stops on a route in a Route Container and move stops within the fixed stops in any sort order needed. Make sure to always place the pickup of a stop before its delivery. 


There is currently no automatic scrollbar available when dragging a stop lower down in a route to the upper locked stops but this will be released as a hot fix in the weeks to come. 
Work arounds is to expand the routes by dragging them up and reduce the Zoom. 
Alternately, you can set a larger number of locked stops and move the stop a few positioin at a time then once this is done, change the locked stops back to the original number. 

Setting number of fixed stops on a route

1) Open a Route Container. 

2) On a route, click on the route menu and select Set Number of Fixed Stops.

3) In the dialog box, enter the number of stops starting at stop 1 which will be fixed for the route then Click Save. If you enter 0 no fixed stops will set.

4) The stops that were fixed will show with a lock icon:

Removing fixed stops on a route

1) On the route menu where the fixed stops should be removed, click on the menu and select Set number of fixed stops.

2) Enter 0 in the dialog box and save. 


Moving stops within the fixed stops section

1) Drag and drop a stop to the fixed stops section making sure the pickup stop (green circle) is always before the delivery stop (red circle).

The last fixed stop that was set will be available to be optimized within the route while the fixed stops will remain on top.


Optimizing a route with fixed stops

1) Click on Optimize icon


The route will optimize the stops below the fixed stops from the last fixed stop address. The fixed stops will remain at the top of the route. 



Service Level Color Display on Dispatch Board
Service level color will be displayed on the Route map, in the route list of orders as well as on the Map in the Dispatch Board and the Map on the Grid Board.


Service Levels Display on Map Board and Route Map

Service Level color is displayed on the top left corner of the pin in trign



Grid Board Order List Status and Vehicle Column Filter Modification

Order status and vehicle now show as a list of choices on the Grid Board, making it easier for dispatchers to select the statuses and vehicles to filter. 


For boards where this was filtered already, othe selection will be checked if the entry matches an entry in the list. 


Grid Board Filter in Settings

On the Grid Board settings, users can now filter the order list by Reference Numbers and/or User fields.

Add Reference Numbers or User Fields as a Filter

1) Open the Boards menu on the Dispatch Board and click on a Board's setting gear icon 

2) In the Board setup scroll to the Order Filter list:

3) Open User Fields or Reference Numbers section to show the list of User Fields or Reference Numbers.

The labels displayed are the Order Field Labels and the Item Field Labels and are grouped by their labels and the Reference Number Labels. 
If the same User Field ID is used on multiple fields in different profiles but the labels of those fields are different, only the first label will be displayed

4) Check if you want the filter to include or exclude the selected fields.

5) Type the name of the label in the Search field to filter the list of fields.

6) Select the field to filter and type in the information to filter on. The entry can be partial (for instance, Door would find anything that has the word door: Front Door, Back Door).

7) Click on Apply to filter the order list.

Checking multiple fields will act as an OR where any order containing any of the checked fields meeting the criteria will be displayed 



Administration


Password Policy

The password policy has changed and now requires passwords meeting certaine criteria for new internal and external users as well as drivers. The same policy will also apply for existing users/drivers who modify their passwords. 

Password Rule

- Passwords must be at least 12 characters.
- Passwords must have at least one non-alphanumeric character.
- Passwords must have at least one digit ('0'-'9').
- Password must have at least one alphabetic character ('A'-'Z').


A tool tip is available everywhere a new user can be entered or when users change their password to remind them of the password rule.

 

Calendar

Please review New Features for Release 1.46 under Administration section to learn on how to setup the holidays in the Calendars. 


Please make sure to update the Holidays calendar with any additions that were added to Holidays since the Version 1.46 deployment. 
Holidays menu, which was previously setup under Settings > Configuration > System > Holidays, is no longer available in version 1.47 and the Accounts will start using the new Calendar feature associated to the Company's Account. If a calendar is setup at the Account level, the Account's order will use the Account's calendar instead.


Company

You can now setup a Calendar at the company level. All accounts associated to this company will use this calendar. 

By default, the default Holidays calendar which was created when version 1.46 was deployed will be associated to all Companies. 

Accounts with no associated calendar will use their Company's calendar to set the pickup and delivery windows as well as the system defined Holiday extra fee.


Setup a Calendar on the Company

1) Open Settings, Companies

2) In the Companies list, click on a company

3) In the Company details, select or edit the Holiday Calendar:

4) Click on Save button.



Order Update Script

The order update script now allows the automatic addition of hubs on a standard order to create a multi-segment order with its segment according to certain criteria. 

The hubs can be added to a standard order. Existing multi-segment orders cannot have hubs added. 


Please contact Support to validate and publish your script(s). 


Create an Order Update Script to Add Hubs to a Standard Order

1) Open Settings, System, Scripts and click on New Script then enter a unique name and select in Type, Order Update then click on Create.

2) An example script to add an attribute to an order is provided when you create the script. 

3) Type in the script, click on Validate once done to ensure the script does not contain any incorrect information and then click on Save.

4) The script can only be tested once associated to an Account. 

To do this, please send the following information to Support:

Account ID: All orders created for this account will go through the script and be updated accordingly

Script ID: This can be found on the URL when you are editing the script.


Example of Script

Because only orders that are standard (not multi-segment nor order segments) can have hubs added, it is important to add an if statement in your script to verify that the order is a standard order:

    if (order.FulfillmentType == OrderFulfillmentType.Standard)


As an example, here is a script that adds 1 hub to all orders from an account:



using System.Linq;
public async Task OnOrderUpdate(IOrderUpdater order, IScriptDataProvider data, ILogger logger)

{    
    if (order.FulfillmentType == OrderFulfillmentType.Standard)
    {
        logger.LogInformation($"Creating segments in order {order.OrderId}");

        await order.AddHubs(
        new HubInfo
        {
            Address = new Address
            {               
                AddressLine1 = "999 Street Name",
                City = "City",
                ZipPostalCode = "12345",
                StateProvince = "AA",
                Location = new LatLng(11.1111, -11.1111)
            },
            Contact = new ContactInfo
                {
                    Name = "My Contact from Script",
                    PhoneNumber = "5551234567",
                    Email = "contact@script.com"
                }
        });
    }
}
    

You can add conditions below the If statement for standard orders to verify some order conditions like the service level, attribute, vehicle type, etc. For more information on the conditions for the if statement please see below.


If more than one hub needs to be added, a new hub can be added and the hub section would then look like this:

await order.AddHubs(
    new HubInfo
    {
    Address = new Address
    {                
        AddressLine1 = "999 Street Name1",
        City = "City1",
        ZipPostalCode = "12345",
        StateProvince = "AA",
        Location = new LatLng(11.1111, -11.1111)
    },
    Contact = new ContactInfo
    {
        Name = "My Contact from Script",
        PhoneNumber = "5551234567",
        Email = "contact@script.com"
    }
},
new HubInfo
    {
        Address = new Address
        {
            AddressLine1 = "999 Stree Name 2",
            City = "City2",
            ZipPostalCode = "12346",
            StateProvince = "AA",
            Location = new LatLng(22.2222, -22.2222)
        },
        Contact = new ContactInfo
        {
            Name = "My Contact from Script",
            PhoneNumber = "5551234567",
            Email = "contact@script.com"
        }
});




Order conditions that can be used in the Script

        // Properties

        string OrderId { get; }

        string AccountId { get; }


        string ServiceLevelTypeId { get; }

        string VehicleTypeId { get; }

        

        bool IsReadyForInvoicing { get; }

        bool IsReadyForSettlement { get; }

        bool IsInvoiced { get; }

        bool? GenerateProofOfDeliveryOnDelivery { get; }

        Length Distance { get; }


        TimeWindow PickupWindow { get; }

        TimeWindow DeliveryWindow { get; }


        ContactInfo PickupContact { get; }

        ContactInfo DeliveryContact { get; }


        Address PickupAddress { get; }

        Address DeliveryAddress { get; }


        OrderEventDates EventDates { get; }


        string[] Attributes { get; }

        OrderExtraFeeInfo[] ExtraFees { get; }

        OrderTrackedItemInfo[] TrackedItems { get; }

        OrderItemInfo[] OrderItems { get; }


        Workflow? PickupWorkflow { get; }

        Workflow? DeliveryWorkflow { get; }

        Workflow? AddItemWorkflow { get; }



API


Integration Tenants


IMPORTANT NOTE
Tenant Integration API Order Template:
The following properties will become obsolete in version 1.48 and should be changed if used with the new properties that were added:

PickupDayOffset - to be changed to: PickupFromDayOffset and PickupToDayOffset

DeliveryDayOffset - to be changed to: DeliveryFromDayOffset and DeliveryToDayOffset

 

Route Plan

Route Plans can be created and edited through the API. Information can be viewed on https://api.dispatchscience.com  under RoutePlans section. 


Get Route Plans

GET /api/v1/routeplans


Create a New Route Plan

POST /api/v1/routeplans

Body:

{

  "type": 0,

  "namePrimary": "string",

  "nameSecondary": "string",

  "descriptionPrimary": "string",

  "descriptionSecondary": "string",

  "rank": 0,

  "warehouseLocation": {

    "latitude": 0,

    "longitude": 0

  },

  "warehouseAddress": {

    "addressLine1": "string",

    "addressLine2": "string",

    "company": "string",

    "city": "string",

    "postalCode": "string",

    "stateProvince": "string"

  },

  "endRouteAtWarehouse": true

}


where type:

0 = Map Based

1 = ZIP Based



Get a Route Plan

GET /api/v1/routeplans/{routePlanId}


Delete a Route Plan

DELETE /api/v1/routeplans/{routePlanId}


Edit a Route Plan

PUT /api/v1/routeplans/{routePlanId}

Body:

{

  "namePrimary": "string",

  "nameSecondary": "string",

  "descriptionPrimary": "string",

  "descriptionSecondary": "string",

  "rank": 0,

  "warehouseLocation": {

    "latitude": 0,

    "longitude": 0

  },

  "warehouseAddress": {

    "addressLine1": "string",

    "addressLine2": "string",

    "company": "string",

    "city": "string",

    "postalCode": "string",

    "stateProvince": "string"

  },

  "endRouteAtWarehouse": true

}



Enable or Disable a Route Plan

Enable a route plan: PUT /api/v1/routeplans/{routePlanId}/enable?enable=true

Disable a route plan: PUT /api/v1/routeplans/{routePlanId}/enable?enable=false


Add an Account and Service Level to a Route Plan

PUT /api/v1/routeplans/{routePlanId}/account-service-level

Body:

{

  "accountId": "string",

  "serviceLevelId": "string",

  "locationToUse": 0

}


where location:

0: Pickup

1: Delivery


Delete an Account and Service Level from a Route Plan

DELETE /api/v1/routeplans/{routePlanId}/account-service-level/{accountServiceLevelId}


Add a Schedule to a RoutePlan

POST /api/v1/routeplans/{routePlanId}/schedule

Body:

{

  "daysOfWeek": [

    0

  ],

  "startTime": "string",

  "orderCreationCutoffTime": "string",

  "orderCreationCutoffDay": 0,

  "pickupCutoffTime": "string"

}


Delete a Schedule from a Route Plan

DELETE /api/v1/routeplans/{routePlanId}/schedule/{scheduleId}


Import Zones to a Route Plan

POST /api/v1/routeplans/{routePlanId}/import-zones


Export Zones from a Route Plan

GET /api/v1/routeplans/{routePlanId}/export-zones


Create a New Zone in the Route Plan

POST /api/v1/routeplans/{routePlanId}/zone

Body:

{

  "zoneId": "string",

  "hexColor": "string",

  "driverId": "string",

  "overrideWarehousePickupAddress": true,

  "warehousePickupAddressOverride": {

    "addressLine1": "string",

    "addressLine2": "string",

    "company": "string",

    "city": "string",

    "postalCode": "string",

    "stateProvince": "string"

  },

  "warehousePickupLocationOverride": {

    "latitude": 0,

    "longitude": 0

  },

  "overrideWarehouseDeliveryAddress": true,

  "warehouseDeliveryAddressOverride": {

    "addressLine1": "string",

    "addressLine2": "string",

    "company": "string",

    "city": "string",

    "postalCode": "string",

    "stateProvince": "string"

  },

  "warehouseDeliveryLocationOverride": {

    "latitude": 0,

    "longitude": 0

  },

  "overrideEndRouteAtWarehouse": true,

  "zipCodes": [

    "string"

  ]

}


Update a Zone in a Route Plan

PUT /api/v1/routeplans/{routePlanId}/zone

Body:

{

  "zoneId": "string",

  "hexColor": "string",

  "driverId": "string",

  "overrideWarehousePickupAddress": true,

  "warehousePickupAddressOverride": {

    "addressLine1": "string",

    "addressLine2": "string",

    "company": "string",

    "city": "string",

    "postalCode": "string",

    "stateProvince": "string"

  },

  "warehousePickupLocationOverride": {

    "latitude": 0,

    "longitude": 0

  },

  "overrideWarehouseDeliveryAddress": true,

  "warehouseDeliveryAddressOverride": {

    "addressLine1": "string",

    "addressLine2": "string",

    "company": "string",

    "city": "string",

    "postalCode": "string",

    "stateProvince": "string"

  },

  "warehouseDeliveryLocationOverride": {

    "latitude": 0,

    "longitude": 0

  },

  "overrideEndRouteAtWarehouse": true,

  "zipCodes": [

    "string"

  ]

}


Delete a Zone for the Route Plan

/api/v1/routeplans/{routePlanId}/zone/{zoneId}


Recurrence

POST /api/v1/recurring-orders

Ability to add the calendar as an inclusion or exclusion was added at the recurrence level as well as the order template level.