For milestones to be calculated for an order, orchestration must take the delivery promise into account, to do so, orders must be orchestrated using a ruleset chaining instead of a ruleset.
Milestones depend on delivery promise configuration
Milestones are calculated based on delivery configuration operations.
Operations taken into account are always_at_start
, before_shipping
and from_destination
. Operations of type after_shipping
are not taken into account, as when received, the current delivery promise eta end is the milestone of interest.
Milestones are precalculated and stored in Endpoint Delivery Promises under the object cutoffs.
Milestone names are auto-generated and match delivery configuration’s operation names.
Delivery configuration’s operations duration depends on operations set in the stock locations. If an operation is not set in the stock location, a duration of 0 seconds will be considered for it.
Endpoint Delivery Promise (EDP) Cutoff Example
{ "_id" : ObjectId("618225724bbd51a42c47ce10"), "cutoffs" : { "prep_time_sfs" : 1636030800, "carrier_pickup" : 1636030800, "without_always_at_start" : 1636027200, "purchase_cutoff" : 1636027200 }, "delivery_method" : "STD", "delivery_route_id" : "GB_GB_DPD_Standard", "eta_end" : 1636232400, "eta_start" : 1636117201, "expired" : false, "pickup_day" : 1635984000, "sales_channel_id" : "web", "version" : 0, "endpoint_ids" : [ "190", "157" ], "public_id" : "5279a9cc-3c6b-11ec-bf59-02420a0001f3", "unavailable_endpoint_ids" : [] } |
Using milestones
To exploit milestones during order's treatment, milestones must be used in the workflow. This allows to set milestones - considered that it has been reached - and set alerts if not reached in time.
Workflow
All information regarding workflow actions can be found at Orders & workflows
set_milestone : set the achieved milestone. If empty,
without_always_at_start
milestone is set (generally de case when initiating milestones in the graph).
For theset_milestone
action to work, the line item group must have stock location ID assigned. As a result, when placing aset_milestone
in the workflow it must be placed after assign origin actions.To make use of milestones, they must be stored for the order at each of its line_item_groups claimed transition. To do so, the action
set_milestone
has to be set in the claim transition of theline_item_groups
, if any..When recomputing, solutions with non-achieved milestones dates in the future (greater than now) will be considered as valid options. Those with dates in the past, will not be considered.
set_milestone_alert : Schedule alerts to be triggered at milestones cutoffs (plus a delay)
Notifications can be scheduled to be triggerd at the time of milestones cutoffs (plus a certain delay). When triggered, a validity check will be performed to ensure the specified milestone has not yet been reached/acheived. If already reached, notifications won't be triggered.
The time at which the notification will be triggered is the milestone cutoff of the first milestone stored in
order_delivery_promises
. Cutoffs are sorted based on the sort criteria configured for the site.
A special notification named
recompute_cutoffs_sets
can be called to recompute the cutoffs for each milestone.
When recomputing cutoff sets, solutions with non-achieved milestones dates in the future (greater than now) will be considered as valid options. Those with dates in the past, will not be considered.
Notifications
Milestones notifications are sent using a special rabbit queue. The project must have the following notification configured for notifications to work.
lig_milestone_reached: media: rabbit: - order_dp:lig_milestone_reached time_type: duration time_value: 0s
Configuration example
For the set_milestone
action to work, the line item group must have stock location ID assigned. As a result, when placing a set_milestone
in the workflow it must be placed after assign origin actions, if any.
Workflow
placed: transitions: claimed: # De placed à claimed (VI) conditions: actions_after: - type: set_milestone - type: set_milestone_alert parameters: milestone: packed notifications: - name: send_mail delay: -300 params: to: "tbaudon@onestock-retail.com" claimed: transitions: packed: # De claimed à packed (VI) conditions: actions_after: - type: set_milestone parameters: milestone : preparation #name depends on DP config packed: transitions: dispatched: # De packed à dispatched (VI) conditions: actions_after: - type: set_milestone parameters: milestone : carrier_pickup
Notifications
lig_milestone_reached: media: rabbit: - order_dp:lig_milestone_reached time_type: duration time_value: 0s
Display the milestones on the store app
Select the pages and milestones to display
In the store app config, you need to add a delivery_promise key, with the list of pages where to display the milestones.
Pages supported:
pack
,bag
,reserve
,pack_scan
,bag_scan
delivery_promise: pack: milestone: carrier_pickup warning: from: 600 to: 1800 bag: milestone: carrier_pickup warning: from: 600 to: 1800 reserve: milestone: carrier_pickup warning: from: 600 to: 1800
The warning indicates the period of time, in seconds, before the milestone, during which the remaining time will be showed as a warning, in orange. Before, the milestone is shown with no warning, and after it is shown in alert, in red.
Turn on the display of milestone on the stock location
Your stock location must have a configuration to indicate that the milestones can be displayed.
You must configure this on the stock location (endpoint), by API (it is currently not available in the backoffice):
"configurations": { "delivery_promise": { "milestone": true, } }