Author:
Yulia Andreyanova
Changed on:
30 Oct 2024
If your account is using an Order module version earlier than 1.3.0, a Fulfilment module version earlier than 2.1.0, or a Core module version earlier than 1.2.5, you'll need to install the latest module versions.
This will grant you access to the latest workflows and the following essential rules for the Order Module:
There are two ways to update the Location and Orders workflows:
Option 1:
Use the reference workflows from the Fulfilment Module's version 2.1.0 or higher and the Order Module's version 1.3.0 or higher. This is recommended if you're working with default workflows, especially for new retailers without customizations.
The following how-to guide, 'Adding a Workflow to your Retailer via API,' provides instructions on updating a workflow.
The necessary workflow files are included in the Fulfillment Module (v2.1.0 and greater) and Order Module (v1.3.0 and greater) zip files.
Option 2:
If your workflows are customized, you’ll need to manually integrate new rules and ruleSets:
`COMPLETE`
1{
2 "name": "PickConfirmAndWaveComplete",
3 "description": "Assign the picked items to fulfilment and set the Wave status to 'COMPLETE'.",
4 "type": "WAVE",
5 "subtype": "STORE",
6 "eventType": "NORMAL",
7 "rules": [
8 {
9 "name": "[[account.id]].fulfilment.AllocateConfirmedItemsByFulfilmentExpiry",
10 "props": {
11 "eventName": "FulfilmentPack",
12 "excludedStatuses": [
13 "EXPIRED"
14 ]
15 }
16 },
17 {
18 "name": "[[account.id]].core.SetState",
19 "props": {
20 "status": "COMPLETE"
21 }
22 }
23 ],
24 "triggers": [
25 {
26 "status": "PICK"
27 }
28 ],
29 "userActions": [
30 {
31 "context": [
32 {
33 "label": "Confirm pick",
34 "type": "PRIMARY",
35 "modules": [
36 "servicepoint",
37 "store"
38 ],
39 "confirm": true
40 }
41 ],
42 "attributes": [
43 {
44 "name": "pickedItems",
45 "label": "Picked Items",
46 "type": "PICKED_ITEMS",
47 "source": "",
48 "defaultValue": "",
49 "mandatory": true
50 }
51 ]
52 }
53 ]
54},
Language: json
Name: PickConfirmAndWaveComplete ruleSet
Description:
PickConfirmAndWaveComplete ruleSet
`READY_FOR_PACK`
`READY_FOR_PACK`
`REJECTED`
1{
2 "name": "FulfilmentPack",
3 "description": "Event is triggered from the wave entity and starts the pack process for the items in the fulfilment",
4 "type": "FULFILMENT",
5 "eventType": "NORMAL",
6 "rules": [
7 {
8 "name": "[[account.id]].order.ConfirmFulfilmentItems",
9 "props": null
10 },
11 {
12 "name": "[[account.id]].core.SendEvent",
13 "props": {
14 "eventName": "VerifyFulfilmentItemsForPack"
15 }
16 }
17 ],
18 "triggers": [
19 {
20 "status": "ASSIGNED"
21 }
22 ],
23 "userActions": []
24},
25{
26 "name": "VerifyFulfilmentItemsForPack",
27 "description": "Verifies Fulfilment Items and triggers different events based on whether all,some or none of the items were picked during the Pick phase",
28 "type": "FULFILMENT",
29 "eventType": "NORMAL",
30 "rules": [
31 {
32 "name": "[[account.id]].order.VerifyingFulfilmentItems",
33 "props": {
34 "quantity": "ALL",
35 "eventName": "AllReadyForPack"
36 }
37 },
38 {
39 "name": "[[account.id]].order.VerifyingFulfilmentItems",
40 "props": {
41 "quantity": "PARTIAL",
42 "eventName": "PartiallyReadyForPack"
43 }
44 },
45 {
46 "name": "[[account.id]].order.VerifyingFulfilmentItems",
47 "props": {
48 "quantity": "NONE",
49 "eventName": "AllRejected"
50 }
51 }
52 ],
53 "triggers": [
54 {
55 "status": "ASSIGNED"
56 }
57 ],
58 "userActions": []
59},
60{
61 "name": "AllReadyForPack",
62 "description": "Sends an event to inventory to reset the reserved inventory values and changes the status of fulfilment to READY_FOR_PACK when all items in the Fulfilment are fulfilled from Store or Warehouse",
63 "type": "FULFILMENT",
64 "eventType": "NORMAL",
65 "rules": [
66 {
67 "name": "[[account.id]].core.SetState",
68 "props": {
69 "status": "READY_FOR_PACK"
70 }
71 },
72 {
73 "name": "[[account.id]].order.SendEventToUpdateInventoryQuantity",
74 "props": {
75 "eventName": "UpdateInventoryQty",
76 "operation": "RESET_RESERVE",
77 "inventoryCatalogueRef": "[[inventory.catalogue.ref]]",
78 "retailerId": "[[inventory.retailer.id]]"
79 }
80 }
81 ],
82 "triggers": [
83 {
84 "status": "ASSIGNED"
85 }
86 ],
87 "userActions": []
88},
89{
90 "name": "PartiallyReadyForPack",
91 "description": "Sends an event to inventory to reset the reserved inventory values and changes the status of fulfilment to READY_FOR_PACK when only some items in the Fulfilment are fulfilled from Store or Warehouse. Sends an event to the order entity to source for the unfulfilled items from the next best location",
92 "type": "FULFILMENT",
93 "eventType": "NORMAL",
94 "rules": [
95 {
96 "name": "[[account.id]].core.SetState",
97 "props": {
98 "status": "READY_FOR_PACK"
99 }
100 },
101 {
102 "name": "[[account.id]].order.SendEventToUpdateInventoryQuantity",
103 "props": {
104 "eventName": "UpdateInventoryQty",
105 "operation": "RESET_RESERVE",
106 "inventoryCatalogueRef": "[[inventory.catalogue.ref]]",
107 "retailerId": "[[inventory.retailer.id]]"
108 }
109 },
110 {
111 "name": "[[account.id]].order.SendEventForOrder",
112 "props": {
113 "eventName": "FindAndCreateOrderFulfilment"
114 }
115 }
116 ],
117 "triggers": [
118 {
119 "status": "ASSIGNED"
120 }
121 ],
122 "userActions": []
123},
124{
125 "name": "ConfirmParcels",
126 "description": "Event is triggered from the user action and starts the pack process for the items in the fulfilment",
127 "type": "FULFILMENT",
128 "subtype": "HD_PFS",
129 "eventType": "NORMAL",
130 "rules": [
131 {
132 "name": "[[account.id]].order.SetFulfilmentItemRejections",
133 "props": null
134 },
135 {
136 "name": "[[account.id]].core.SendEvent",
137 "props": {
138 "eventName": "VerifyParcels"
139 }
140 }
141 ],
142 "triggers": [
143 {
144 "status": "READY_FOR_PACK"
145 }
146 ],
147 "userActions": [
148 {
149 "context": [
150 {
151 "label": "Confirm Parcels",
152 "type": "PRIMARY",
153 "modules": [
154 "servicepoint",
155 "store"
156 ],
157 "confirm": true
158 }
159 ],
160 "attributes": [
161 {
162 "name": "packedItems",
163 "label": "Fulfilment Articles and Rejections",
164 "type": "FULFILMENT_PACK",
165 "source": "",
166 "defaultValue": "",
167 "mandatory": true
168 }
169 ]
170 }
171 ]
172},
173{
174 "name": "VerifyParcels",
175 "description": "Verifies Fulfilment Items and Rejections and triggers different events based on whether all,some or none of the items were packed during the PACK phase",
176 "type": "FULFILMENT",
177 "eventType": "NORMAL",
178 "rules": [
179 {
180 "name": "[[account.id]].order.SendEventOnVerifyingParcelsComplete",
181 "props": {
182 "eventName": "CreateParcels"
183 }
184 },
185 {
186 "name": "[[account.id]].order.SendEventOnVerifyingParcelsPartiallyComplete",
187 "props": {
188 "eventName": "ReassignRejections"
189 }
190 },
191 {
192 "name": "[[account.id]].order.SendEventOnVerifyingNoParcels",
193 "props": {
194 "eventName": "RejectFulfilment"
195 }
196 }
197 ],
198 "triggers": [
199 {
200 "status": "READY_FOR_PACK"
201 }
202 ],
203 "userActions": [
204 ]
205},
206{
207 "name": "ReassignRejections",
208 "description": "Sends an event to create parcels for packed items. Sends an event to inventory to reset the reserved inventory values. Sends an event to the order entity to source for the unfulfilled items from the next best location",
209 "type": "FULFILMENT",
210 "eventType": "NORMAL",
211 "rules": [
212 {
213 "name": "[[account.id]].order.SendEventForOrder",
214 "props": {
215 "eventName": "FindAndCreateOrderFulfilment"
216 }
217 },
218 {
219 "name": "[[account.id]].order.SendEventToUpdateInventoryQuantity",
220 "props": {
221 "eventName": "UpdateInventoryQty",
222 "operation": "RESET_RESERVE",
223 "inventoryCatalogueRef": "[[inventory.catalogue.ref]]",
224 "retailerId": "[[inventory.retailer.id]]"
225 }
226 },
227 {
228 "name": "[[account.id]].core.SendEvent",
229 "props": {
230 "eventName": "CreateParcels"
231 }
232 }
233 ],
234 "triggers": [
235 {
236 "status": "READY_FOR_PACK"
237 }
238 ],
239 "userActions": []
240},
241{
242 "name": "RejectFulfilment",
243 "description": "Changes the status of fulfilment to REJECTED when no items in the Fulfilment can be packed. Sends an event to inventory to reset the reserved inventory values. Sends an event to the order entity to source for the unfulfilled items from the next best location",
244 "type": "FULFILMENT",
245 "eventType": "NORMAL",
246 "rules": [
247 {
248 "name": "[[account.id]].core.SetState",
249 "props": {
250 "status": "REJECTED"
251 }
252 },
253 {
254 "name": "[[account.id]].order.SendEventToUpdateInventoryQuantity",
255 "props": {
256 "eventName": "UpdateInventoryQty",
257 "operation": "RESET_RESERVE",
258 "inventoryCatalogueRef": "[[inventory.catalogue.ref]]",
259 "retailerId": "[[inventory.retailer.id]]"
260 }
261 },
262 {
263 "name": "[[account.id]].order.SendEventForOrder",
264 "props": {
265 "eventName": "FindAndCreateOrderFulfilment"
266 }
267 }
268 ],
269 "triggers": [
270 {
271 "status": "READY_FOR_PACK"
272 }
273 ],
274 "userActions": []
275},
276{
277 "name": "CreateParcels",
278 "description": "Creates articles / parcels during pack phase of the fulfilment. Sends an event to indicate Article is created",
279 "type": "FULFILMENT",
280 "eventType": "NORMAL",
281 "rules": [
282 {
283 "name": "[[account.id]].order.CreateParcelsForFulfilment",
284 "props": null
285 },
286 {
287 "name": "[[account.id]].core.SendEvent",
288 "props": {
289 "eventName": "ArticleCreated"
290 }
291 }
292 ],
293 "triggers": [
294 {
295 "status": "READY_FOR_PACK"
296 }
297 ],
298 "userActions": []
299},
Language: json
Name: Order Workflow
Description:
New ruleSets for HD and CC Order Workflows
`SendEventForOrder`
`SendEventForOrderOnVerifyingRejections`
1{
2 "name": "AllArticlesAwaitingCourierCollection",
3 "description": "Changes fulfilment status and sends an event to Order if items was not rejected on Pack step",
4 "type": "FULFILMENT",
5 "eventType": "NORMAL",
6 "rules": [
7 {
8 "name": "[[account.id]].core.SetState",
9 "props": {
10 "status": "AWAITING_COURIER_COLLECTION"
11 }
12 },
13 {
14 "name": "[[account.id]].order.SendEventForOrderOnVerifyingRejections",
15 "props": {
16 "eventName": "FulfilmentAwaitingCourierCollection"
17 }
18 }
19 ],
20 "triggers": [
21 {
22 "status": "FULFILLED"
23 },
24 {
25 "status": "PARTIALLY_FULFILLED"
26 },
27 {
28 "status": "READY_FOR_PACK"
29 }
30 ],
31 "userActions": []
32}
Language: json
Name: Home Delivery Order Workflow: SendEventForOrderOnVerifyingRejections rule usage
Description:
Home Delivery Order Workflow: AllArticlesAwaitingCourierCollection ruleset with new SendEventForOrderOnVerifyingRejections rule.
1{
2 "name": "AllArticlesAwaitingCustomerCollection",
3 "description": "Changes fulfilment status and sends an event to Order if items was not rejected on Pack step",
4 "type": "FULFILMENT",
5 "eventType": "NORMAL",
6 "rules": [
7 {
8 "name": "[[account.id]].core.SetState",
9 "props": {
10 "status": "AWAITING_CUSTOMER_COLLECTION"
11 }
12 },
13 {
14 "name": "[[account.id]].order.SendEventForOrderOnVerifyingRejections",
15 "props": {
16 "eventName": "FulfilmentAwaitingCollection"
17 }
18 }
19 ],
20 "triggers": [
21 {
22 "status": "FULFILLED"
23 },
24 {
25 "status": "PARTIALLY_FULFILLED"
26 },
27 {
28 "status": "READY_FOR_PACK"
29 }
30 ],
31 "userActions": []
32 }
Language: json
Name: Click and Collect Order Workflow: SendEventForOrderOnVerifyingRejections rule usage
Description:
Click and Collect Order Workflow: AllArticlesAwaitingCustomerCollection ruleset with new SendEventForOrderOnVerifyingRejections rule.
`ModifyFulfilmentTypeToHDPFS`
1{
2 "name": "ModifyFulfilmentTypeToHDPFS",
3 "description": "Modifies the fulfilment type to indicate it is for delivery",
4 "type": "FULFILMENT",
5 "eventType": "NORMAL",
6 "rules": [
7 {
8 "name": "[[account.id]].order.UpdateFulfilmentType",
9 "props": {
10 "fulfilmentType": "HD_PFS"
11 }
12 },
13 {
14 "name": "[[account.id]].core.SetState",
15 "props": {
16 "status": "FULFILLED"
17 }
18 }
19 ],
20 "triggers": [
21 {
22 "status": "READY_FOR_PACK"
23 }
24 ],
25 "userActions": []
26}
Language: json
Name: ModifyFulfilmentTypeToHDPFS ruleset
Description:
`ModifyFulfilmentTypeToHDPFS`
1{
2 "name": "FulfilmentPack",
3 "description": "Event is triggered from the wave entity and starts the pack process for the items in the fulfilment",
4 "type": "FULFILMENT",
5 "eventType": "NORMAL",
6 "rules": [
7 {
8 "name": "[[account.id]].order.ConfirmFulfilmentItems",
9 "props": null
10 },
11 {
12 "name": "[[account.id]].core.SendEvent",
13 "props": {
14 "eventName": "VerifyFulfilmentItemsForPack"
15 }
16 }
17 ],
18 "triggers": [
19 {
20 "status": "ASSIGNED"
21 }
22 ],
23 "userActions": []
24 },
25 {
26 "name": "VerifyFulfilmentItemsForPack",
27 "description": "Verifies Fulfilment Items and triggers different events based on whether all,some or none of the items were picked during the Pick phase",
28 "type": "FULFILMENT",
29 "eventType": "NORMAL",
30 "rules": [
31 {
32 "name": "[[account.id]].order.VerifyingFulfilmentItems",
33 "props": {
34 "quantity": "ALL",
35 "eventName": "AllReadyForPack"
36 }
37 },
38 {
39 "name": "[[account.id]].order.VerifyingFulfilmentItems",
40 "props": {
41 "quantity": "PARTIAL",
42 "eventName": "PartiallyReadyForPack"
43 }
44 },
45 {
46 "name": "[[account.id]].order.VerifyingFulfilmentItems",
47 "props": {
48 "quantity": "NONE",
49 "eventName": "AllRejected"
50 }
51 }
52 ],
53 "triggers": [
54 {
55 "status": "ASSIGNED"
56 }
57 ],
58 "userActions": []
59 },
60 {
61 "name": "AllReadyForPack",
62 "description": "Sends an event to inventory to reset the reserved inventory values and changes the status of fulfilment to READY_FOR_PACK when all items in the Fulfilment are fulfilled from Store or Warehouse",
63 "type": "FULFILMENT",
64 "eventType": "NORMAL",
65 "rules": [
66 {
67 "name": "[[account.id]].core.SetState",
68 "props": {
69 "status": "READY_FOR_PACK"
70 }
71 },
72 {
73 "name": "[[account.id]].order.SendEventToUpdateInventoryQuantity",
74 "props": {
75 "eventName": "UpdateInventoryQty",
76 "operation": "RESET_RESERVE",
77 "inventoryCatalogueRef": "[[inventory.catalogue.ref]]",
78 "retailerId": "[[inventory.retailer.id]]"
79 }
80 }
81 ],
82 "triggers": [
83 {
84 "status": "ASSIGNED"
85 }
86 ],
87 "userActions": []
88 },
89 {
90 "name": "PartiallyReadyForPack",
91 "description": "Sends an event to inventory to reset the reserved inventory values and changes the status of fulfilment to READY_FOR_PACK when only some items in the Fulfilment are fulfilled from Store or Warehouse. Sends an event to the order entity to source for the unfulfilled items from the next best location",
92 "type": "FULFILMENT",
93 "eventType": "NORMAL",
94 "rules": [
95 {
96 "name": "[[account.id]].core.SetState",
97 "props": {
98 "status": "READY_FOR_PACK"
99 }
100 },
101 {
102 "name": "[[account.id]].order.SendEventToUpdateInventoryQuantity",
103 "props": {
104 "eventName": "UpdateInventoryQty",
105 "operation": "RESET_RESERVE",
106 "inventoryCatalogueRef": "[[inventory.catalogue.ref]]",
107 "retailerId": "[[inventory.retailer.id]]"
108 }
109 },
110 {
111 "name": "[[account.id]].order.SendEventForFulfilmentChoice",
112 "props": {
113 "eventName": "FindAndCreateFulfilment"
114 }
115 }
116 ],
117 "triggers": [
118 {
119 "status": "ASSIGNED"
120 }
121 ],
122 "userActions": []
123 },
124 {
125 "name": "ConfirmParcels",
126 "description": "Event is triggered from the user action and starts the pack process for the items in the fulfilment",
127 "type": "FULFILMENT",
128 "subtype": "HD_PFS",
129 "eventType": "NORMAL",
130 "rules": [
131 {
132 "name": "[[account.id]].order.SetFulfilmentItemRejections",
133 "props": null
134 },
135 {
136 "name": "[[account.id]].core.SendEvent",
137 "props": {
138 "eventName": "VerifyParcels"
139 }
140 }
141 ],
142 "triggers": [
143 {
144 "status": "READY_FOR_PACK"
145 }
146 ],
147 "userActions": [
148 {
149 "context": [
150 {
151 "label": "Confirm Parcels",
152 "type": "PRIMARY",
153 "modules": [
154 "servicepoint",
155 "store"
156 ],
157 "confirm": true
158 }
159 ],
160 "attributes": [
161 {
162 "name": "packedItems",
163 "label": "Fulfilment Articles and Rejections",
164 "type": "FULFILMENT_PACK",
165 "source": "",
166 "defaultValue": "",
167 "mandatory": true
168 }
169 ]
170 }
171 ]
172 },
173 {
174 "name": "ConfirmParcels",
175 "description": "Event is triggered from the user action and starts the pack process for the items in the fulfilment",
176 "type": "FULFILMENT",
177 "subtype": "CC_PFS",
178 "eventType": "NORMAL",
179 "rules": [
180 {
181 "name": "[[account.id]].order.SetFulfilmentItemRejections",
182 "props": null
183 },
184 {
185 "name": "[[account.id]].core.SendEvent",
186 "props": {
187 "eventName": "VerifyParcels"
188 }
189 }
190 ],
191 "triggers": [
192 {
193 "status": "READY_FOR_PACK"
194 }
195 ],
196 "userActions": [
197 {
198 "context": [
199 {
200 "label": "Confirm Parcels",
201 "type": "PRIMARY",
202 "modules": [
203 "servicepoint",
204 "store"
205 ],
206 "confirm": true
207 }
208 ],
209 "attributes": [
210 {
211 "name": "packedItems",
212 "label": "Fulfilment Articles and Rejections",
213 "type": "FULFILMENT_PACK",
214 "source": "",
215 "defaultValue": "",
216 "mandatory": true
217 }
218 ]
219 }
220 ]
221 },
222 {
223 "name": "ConfirmParcels",
224 "description": "Event is triggered from the user action and starts the pack process for the items in the fulfilment",
225 "type": "FULFILMENT",
226 "subtype": "CC_PFCP",
227 "eventType": "NORMAL",
228 "rules": [
229 {
230 "name": "[[account.id]].order.SetFulfilmentItemRejections",
231 "props": null
232 },
233 {
234 "name": "[[account.id]].core.SendEvent",
235 "props": {
236 "eventName": "VerifyParcels"
237 }
238 }
239 ],
240 "triggers": [
241 {
242 "status": "READY_FOR_PACK"
243 }
244 ],
245 "userActions": [
246 {
247 "context": [
248 {
249 "label": "Confirm Parcels",
250 "type": "PRIMARY",
251 "modules": [
252 "servicepoint",
253 "store"
254 ],
255 "confirm": true
256 }
257 ],
258 "attributes": [
259 {
260 "name": "packedItems",
261 "label": "Fulfilment Articles and Rejections",
262 "type": "FULFILMENT_PACK",
263 "source": "",
264 "defaultValue": "",
265 "mandatory": true
266 }
267 ]
268 }
269 ]
270 },
271 {
272 "name": "VerifyParcels",
273 "description": "Verifies Fulfilment Items and Rejections and triggers different events based on whether all,some or none of the items were packed during the PACK phase",
274 "type": "FULFILMENT",
275 "eventType": "NORMAL",
276 "rules": [
277 {
278 "name": "[[account.id]].order.SendEventOnVerifyingParcelsComplete",
279 "props": {
280 "eventName": "CreateParcels"
281 }
282 },
283 {
284 "name": "[[account.id]].order.SendEventOnVerifyingParcelsPartiallyComplete",
285 "props": {
286 "eventName": "ReassignRejections"
287 }
288 },
289 {
290 "name": "[[account.id]].order.SendEventOnVerifyingNoParcels",
291 "props": {
292 "eventName": "RejectFulfilment"
293 }
294 }
295 ],
296 "triggers": [
297 {
298 "status": "READY_FOR_PACK"
299 }
300 ],
301 "userActions": [
302 ]
303 },
304 {
305 "name": "ReassignRejections",
306 "description": "Sends an event to create parcels for packed items. Sends an event to inventory to reset the reserved inventory values. Sends an event to the order entity to source for the unfulfilled items from the next best location",
307 "type": "FULFILMENT",
308 "eventType": "NORMAL",
309 "rules": [
310 {
311 "name": "[[account.id]].order.SendEventForFulfilmentChoice",
312 "props": {
313 "eventName": "FindAndCreateFulfilment"
314 }
315 },
316 {
317 "name": "[[account.id]].order.SendEventToUpdateInventoryQuantity",
318 "props": {
319 "eventName": "UpdateInventoryQty",
320 "operation": "RESET_RESERVE",
321 "inventoryCatalogueRef": "[[inventory.catalogue.ref]]",
322 "retailerId": "[[inventory.retailer.id]]"
323 }
324 },
325 {
326 "name": "[[account.id]].core.SendEvent",
327 "props": {
328 "eventName": "CreateParcels"
329 }
330 }
331 ],
332 "triggers": [
333 {
334 "status": "READY_FOR_PACK"
335 }
336 ],
337 "userActions": []
338 },
339 {
340 "name": "RejectFulfilment",
341 "description": "Changes the status of fulfilment to REJECTED when no items in the Fulfilment can be packed. Sends an event to inventory to reset the reserved inventory values. Sends an event to the order entity to source for the unfulfilled items from the next best location",
342 "type": "FULFILMENT",
343 "eventType": "NORMAL",
344 "rules": [
345 {
346 "name": "[[account.id]].core.SetState",
347 "props": {
348 "status": "REJECTED"
349 }
350 },
351 {
352 "name": "[[account.id]].order.SendEventToUpdateInventoryQuantity",
353 "props": {
354 "eventName": "UpdateInventoryQty",
355 "operation": "RESET_RESERVE",
356 "inventoryCatalogueRef": "[[inventory.catalogue.ref]]",
357 "retailerId": "[[inventory.retailer.id]]"
358 }
359 },
360 {
361 "name": "[[account.id]].order.SendEventForFulfilmentChoice",
362 "props": {
363 "eventName": "FindAndCreateFulfilment"
364 }
365 }
366 ],
367 "triggers": [
368 {
369 "status": "READY_FOR_PACK"
370 }
371 ],
372 "userActions": []
373 },
374 {
375 "name": "CreateParcels",
376 "description": "Creates articles / parcels during pack phase of the fulfilment. Sends an event to indicate Article is created",
377 "type": "FULFILMENT",
378 "eventType": "NORMAL",
379 "rules": [
380 {
381 "name": "[[account.id]].order.CreateParcelsForFulfilment",
382 "props": null
383 },
384 {
385 "name": "[[account.id]].core.SendEvent",
386 "props": {
387 "eventName": "ArticleCreated"
388 }
389 }
390 ],
391 "triggers": [
392 {
393 "status": "READY_FOR_PACK"
394 }
395 ],
396 "userActions": []
397 },
398{
399 "name": "ModifyFulfilmentTypeToHDPFS",
400 "description": "Modifies the fulfilment type to indicate it is for delivery",
401 "type": "FULFILMENT",
402 "eventType": "NORMAL",
403 "rules": [
404 {
405 "name": "[[account.id]].order.UpdateFulfilmentType",
406 "props": {
407 "fulfilmentType": "HD_PFS"
408 }
409 },
410 {
411 "name": "[[account.id]].core.SetState",
412 "props": {
413 "status": "FULFILLED"
414 }
415 }
416 ],
417 "triggers": [
418 {
419 "status": "READY_FOR_PACK"
420 }
421 ],
422 "userActions": []
423 },
Language: json
Name: Mixed Basket Order Workflow
Description:
New ruleSets for Mixed Baskets Order Workflows
`SendEventForFulfilmentChoice`
`SendEventForFulfilmentChoiceOnVerifyingRejections`
1{
2 "name": "AllArticlesAwaitingCourierCollection",
3 "description": "Fulfilment State Change to AWAITING_COURIER_COLLECTION",
4 "type": "FULFILMENT",
5 "eventType": "NORMAL",
6 "rules": [
7 {
8 "name": "[[account.id]].core.SetState",
9 "props": {
10 "status": "AWAITING_COURIER_COLLECTION"
11 }
12 },
13 {
14 "name": "[[account.id]].order.SendEventForFulfilmentChoiceOnVerifyingRejections",
15 "props": {
16 "eventName": "FulfilmentAwaitingCourierCollection"
17 }
18 }
19 ],
20 "triggers": [
21 {
22 "status": "FULFILLED"
23 },
24 {
25 "status": "PARTIALLY_FULFILLED"
26 },
27 {
28 "status": "READY_FOR_PACK"
29 }
30 ],
31 "userActions": []
32 },
33{
34 "name": "AllArticlesAwaitingCustomerCollection",
35 "description": "Sends an event to Order and changes fulfilment status",
36 "type": "FULFILMENT",
37 "eventType": "NORMAL",
38 "rules": [
39 {
40 "name": "[[account.id]].core.SetState",
41 "props": {
42 "status": "AWAITING_CUSTOMER_COLLECTION"
43 }
44 },
45 {
46 "name": "[[account.id]].order.SendEventForFulfilmentChoiceOnVerifyingRejections",
47 "props": {
48 "eventName": "FulfilmentAwaitingCollection"
49 }
50 }
51 ],
52 "triggers": [
53 {
54 "status": "FULFILLED"
55 },
56 {
57 "status": "PARTIALLY_FULFILLED"
58 },
59 {
60 "status": "READY_FOR_PACK"
61 }
62 ],
63 "userActions": []
64 }
Language: json
Name: Mixed Basket Order Workflow: SendEventForFulfilmentChoiceOnVerifyingRejections usage
Description:
SendEventForFulfilmentChoiceOnVerifyingRejections usage
Replace the subtype in the
`ConfirmParcels`
`NO_MATCH`
`READY_FOR_PACK`
`ArticleCreated`
`ScheduleDemoConsignment`
`CreateConsignment`
`ArticleAwaitingCourierCollection`
`AllArticlesAwaitingCourierCollection`
`ModifyFulfilmentTypeToCCPFS`
`ArticleAwaitingCustomerCollection`
`AllArticlesAwaitingCustomerCollection`
`READY_FOR_PACK`
1{
2 "name": "READY_FOR_PACK",
3 "entityType": "FULFILMENT",
4 "category": "FULFILMENT"
5}
Language: json
Name: READY_FOR_PACK status
Description:
READY_FOR_PACK status
Let's say you need to convert RESERVED to SALE and CORRECTION after the packing step. To achieve this:
Step 1. Remove the
`SendEventToUpdateInventoryQuantity`
`AllReadyForPack`
`PartiallyReadyForPack`
`ReassignRejections`
`RejectFulfilment`
Once these adjustments are made, each ruleset will look something like this:
1{
2 "name": "AllReadyForPack",
3 "description": "Sends an event to inventory to reset the reserved inventory values and changes the status of fulfilment to READY_FOR_PACK when all items in the Fulfilment are fulfilled from Store or Warehouse",
4 "type": "FULFILMENT",
5 "eventType": "NORMAL",
6 "rules": [
7 {
8 "name": "[[account.id]].core.SetState",
9 "props": {
10 "status": "READY_FOR_PACK"
11 }
12 }
13 ],
14 "triggers": [
15 {
16 "status": "ASSIGNED"
17 }
18 ],
19 "userActions": []
20}
21
Language: plain_text
Name: AllReadyForPack
Description:
Updated AllReadyForPack ruleset
1{
2 "name": "PartiallyReadyForPack",
3 "description": "Sends an event to inventory to reset the reserved inventory values and changes the status of fulfilment to READY_FOR_PACK when only some items in the Fulfilment are fulfilled from Store or Warehouse. Sends an event to the order entity to source for the unfulfilled items from the next best location",
4 "type": "FULFILMENT",
5 "eventType": "NORMAL",
6 "rules": [
7 {
8 "name": "[[account.id]].core.SetState",
9 "props": {
10 "status": "READY_FOR_PACK"
11 }
12 },
13 {
14 "name": "[[account.id]].order.SendEventForOrder",
15 "props": {
16 "eventName": "FindAndCreateOrderFulfilment"
17 }
18 }
19 ],
20 "triggers": [
21 {
22 "status": "ASSIGNED"
23 }
24 ],
25 "userActions": []
26}
27
Language: plain_text
Name: PartiallyReadyForPack
Description:
Updated PartiallyReadyForPack ruleset
1{
2 "name": "ReassignRejections",
3 "description": "Sends an event to create parcels for packed items. Sends an event to inventory to reset the reserved inventory values. Sends an event to the order entity to source for the unfulfilled items from the next best location",
4 "type": "FULFILMENT",
5 "eventType": "NORMAL",
6 "rules": [
7 {
8 "name": "[[account.id]].order.SendEventForOrder",
9 "props": {
10 "eventName": "FindAndCreateOrderFulfilment"
11 }
12 },
13 {
14 "name": "[[account.id]].core.SendEvent",
15 "props": {
16 "eventName": "CreateParcels"
17 }
18 }
19 ],
20 "triggers": [
21 {
22 "status": "READY_FOR_PACK"
23 }
24 ],
25 "userActions": []
26}
27
Language: plain_text
Name: ReassignRejections
Description:
Updated ReassignRejections ruleset
1{
2 "name": "RejectFulfilment",
3 "description": "Changes the status of fulfilment to REJECTED when no items in the Fulfilment can be packed. Sends an event to inventory to reset the reserved inventory values. Sends an event to the order entity to source for the unfulfilled items from the next best location",
4 "type": "FULFILMENT",
5 "eventType": "NORMAL",
6 "rules": [
7 {
8 "name": "[[account.id]].core.SetState",
9 "props": {
10 "status": "REJECTED"
11 }
12 },
13 {
14 "name": "[[account.id]].order.SendEventForOrder",
15 "props": {
16 "eventName": "FindAndCreateOrderFulfilment"
17 }
18 }
19 ],
20 "triggers": [
21 {
22 "status": "READY_FOR_PACK"
23 }
24 ],
25 "userActions": []
26}
27
Language: plain_text
Name: RejectFulfilment
Description:
Updated RejectFulfilment ruleset
Step 2. Add the
`SendEventToUpdateInventoryQuantity`
`VerifyParcels`
1{
2 "name": "VerifyParcels",
3 "description": "Verifies Fulfilment Items and Rejections and triggers different events based on whether all,some or none of the items were packed during the PACK phase",
4 "type": "FULFILMENT",
5 "eventType": "NORMAL",
6 "rules": [
7 {
8 "name": "[[account.id]].order.SendEventOnVerifyingParcelsComplete",
9 "props": {
10 "eventName": "CreateParcels"
11 }
12 },
13 {
14 "name": "[[account.id]].order.SendEventOnVerifyingParcelsPartiallyComplete",
15 "props": {
16 "eventName": "ReassignRejections"
17 }
18 },
19 {
20 "name": "[[account.id]].order.SendEventOnVerifyingNoParcels",
21 "props": {
22 "eventName": "RejectFulfilment"
23 }
24 },
25 {
26 "name": "[[account.id]].order.SendEventToUpdateInventoryQuantity",
27 "props": {
28 "eventName": "UpdateInventoryQty",
29 "operation": "RESET_RESERVE",
30 "inventoryCatalogueRef": "[[inventory.catalogue.ref]]",
31 "retailerId": "[[inventory.retailer.id]]"
32 }
33 }
34 ],
35 "triggers": [
36 {
37 "status": "READY_FOR_PACK"
38 }
39 ],
40 "userActions": []
41}
Language: plain_text
Name: VerifyParcels
Description:
Updated VerifyParcels ruleset
To access the new Pack page and activate the updated Create Wave logic, modify the
`fc.mystique.manifest.store`
The fragment fc.mystique.manifest.store.fragment.pack adds a new root page called Pack to the Fluent Store web app. This page provides the reference configuration for the Assigning Items to Parcels capability, enabling Store Associates to efficiently handle the packing process for multi-parcel shipments. They can assign items to specific parcels, create new parcels, set dimensions and weight, remove parcels, and reject items that don't meet the necessary criteria. Additionally, Store Associates can review all articles in the fulfillment to ensure accuracy after packing is completed.
The fragment fc.mystique.manifest.store.fragment.waves.assigningitems contains updates that enable completing the wave at the Pick stage, streamlining the order fulfillment process by finishing the wave after items are picked.
1
2
3{
4 "manifestVersion": "2.0",
5 "name": "store",
6 "title": "Fluent Store",
7 "orchestrationAlias": "servicepoint",
8 "homePath": "waves",
9 "plugins": [
10 {
11 "type": "url",
12 "src": "/_plugins/store"
13 },
14 {
15 "type": "url",
16 "src": "/_plugins/returns"
17 }
18 ],
19 "context": {
20 "level": "location",
21 "role": [
22 "STORE_ASSISTANT",
23 "STORE"
24 ],
25 "switcher": true
26 },
27 "routes": [
28 {
29 "type": "reference",
30 "settingName": "fc.mystique.manifest.store.fragment.pack"
31 },
32 {
33 "type": "reference",
34 "settingName": "fc.mystique.manifest.store.fragment.waves.assigningitems"
35 },
36 {
37 "type": "reference",
38 "settingName": "fc.mystique.manifest.store.fragment.orders.awaitingpick"
39 },
40 {
41 "type": "reference",
42 "settingName": "fc.mystique.manifest.store.fragment.waves.inprogress"
43 },
44 {
45 "type": "reference",
46 "settingName": "fc.mystique.manifest.store.fragment.waves.complete"
47 },
48 {
49 "type": "reference",
50 "settingName": "fc.mystique.manifest.store.fragment.arrivals"
51 },
52 {
53 "type": "reference",
54 "settingName": "fc.mystique.manifest.store.fragment.customer.collections"
55 },
56 {
57 "type": "reference",
58 "settingName": "fc.mystique.manifest.store.fragment.carrier.collections"
59 },
60 {
61 "type": "reference",
62 "settingName": "fc.mystique.manifest.store.fragment.uncollected"
63 },
64 {
65 "type": "reference",
66 "settingName": "fc.mystique.manifest.store.fragment.returns"
67 }
68 ]
69}
Language: plain_text
Name: Updated fc.mystique.manifest.store
Description:
The Main Store manifest with the new fragment
Verify the user's Store permissions. They must have the
`ARTICLEITEM_VIEW`
To enable the option to print generated pack slips when the packing process is completed, configure printable pack slips through
`fc.store.summary.print.pack.slip`
To enable the option to generate and print PDF order labels upon pack completion, configure printable order labels through the
`fc.store.summary.print.pack.label`
The following enhancements can be enabled through ACCOUNT or RETAILER level settings:
`fc.store.summary.consignment.list.status.column`
Copyright © 2024 Fluent Retail Pty Ltd (trading as Fluent Commerce). All rights reserved. No materials on this docs.fluentcommerce.com site may be used in any way and/or for any purpose without prior written authorisation from Fluent Commerce. Current customers and partners shall use these materials strictly in accordance with the terms and conditions of their written agreements with Fluent Commerce or its affiliates.