@fleetbase/fleetops-engine 0.4.17 → 0.4.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/addon/components/activity-form-panel.hbs +19 -0
  2. package/addon/components/activity-form-panel.js +18 -0
  3. package/addon/components/live-map.js +14 -7
  4. package/addon/components/order-config-manager/details.js +15 -6
  5. package/addon/components/order-config-manager.js +20 -7
  6. package/addon/controllers/operations/order-config.js +2 -1
  7. package/addon/controllers/operations/orders/index/new.js +5 -0
  8. package/addon/controllers/operations/service-rates/index/new.js +23 -2
  9. package/addon/routes/operations/service-rates/index/edit.js +14 -5
  10. package/addon/routes/operations/service-rates/index/new.js +2 -6
  11. package/addon/services/location.js +54 -44
  12. package/addon/templates/operations/service-rates/index/new.hbs +10 -1
  13. package/composer.json +3 -3
  14. package/extension.json +1 -1
  15. package/package.json +3 -3
  16. package/server/config/api.php +3 -650
  17. package/server/config/fleetops.php +127 -4
  18. package/server/migrations/2024_03_12_033527_add_public_id_column_to_order_configs_table.php +34 -0
  19. package/server/migrations/2024_03_13_061249_add_order_config_uuid_column_to_service_rates_table.php +28 -0
  20. package/server/seeders/OrderConfigSeeder.php +2 -130
  21. package/server/src/Console/Commands/FixLegacyOrderConfigs.php +17 -11
  22. package/server/src/Http/Controllers/Api/v1/OrderController.php +25 -3
  23. package/server/src/Http/Controllers/Api/v1/ServiceQuoteController.php +10 -5
  24. package/server/src/Http/Controllers/Internal/v1/OrderConfigController.php +61 -0
  25. package/server/src/Http/Controllers/Internal/v1/OrderController.php +12 -2
  26. package/server/src/Http/Controllers/Internal/v1/ServiceRateController.php +3 -0
  27. package/server/src/Http/Requests/CreateOrderRequest.php +32 -13
  28. package/server/src/Http/Requests/Internal/CreateOrderConfigRequest.php +40 -0
  29. package/server/src/Http/Requests/Internal/CreateOrderRequest.php +97 -0
  30. package/server/src/Http/Requests/Internal/DeleteOrderConfigRequest.php +0 -0
  31. package/server/src/Http/Resources/v1/Order.php +1 -1
  32. package/server/src/Http/Resources/v1/ServiceRate.php +34 -31
  33. package/server/src/Models/OrderConfig.php +48 -0
  34. package/server/src/Models/ServiceRate.php +9 -0
  35. package/server/src/Observers/CompanyObserver.php +20 -0
  36. package/server/src/Providers/FleetOpsServiceProvider.php +1 -0
  37. package/server/src/Support/FleetOps.php +137 -0
  38. package/translations/en-us.yaml +6 -1
@@ -1,65 +1,5 @@
1
1
  <?php
2
2
 
3
- $defaultFlow = [
4
- 'created' => [
5
- 'sequence' => 0,
6
- 'color' => 'green',
7
- 'events' => [
8
- [
9
- 'status' => 'Order dispatched',
10
- 'details' => 'Order has been dispatched to driver',
11
- 'code' => 'dispatched',
12
- ],
13
- ]
14
- ],
15
- 'dispatched' => [
16
- 'sequence' => 0,
17
- 'color' => 'green',
18
- 'events' => [
19
- [
20
- 'status' => 'Driver en-route',
21
- 'details' => 'Driver en-route to location',
22
- 'code' => 'driver_enroute',
23
- ],
24
- ]
25
- ],
26
- 'driver_enroute' => [
27
- 'sequence' => 0,
28
- 'color' => 'green',
29
- 'events' => [
30
- [
31
- 'status' => 'Order completed',
32
- 'details' => 'Driver has completed order',
33
- 'code' => 'completed',
34
- ],
35
- ]
36
- ],
37
- // waypoint drop order statuses
38
- 'waypoint|dispatched' => [
39
-
40
- 'sequence' => 0,
41
- 'color' => 'green',
42
- 'events' => [
43
- [
44
- 'status' => 'Driver en-route to {waypoint.ordinalIndex} waypoint',
45
- 'details' => 'Driver en-route to {waypoint.address}',
46
- 'code' => 'driver_enroute',
47
- ],
48
- ]
49
- ],
50
- 'waypoint|driver_enroute' => [
51
- 'sequence' => 0,
52
- 'color' => 'green',
53
- 'events' => [
54
- [
55
- 'status' => 'Order delivered for {waypoint.ordinalIndex} waypoint',
56
- 'details' => 'Driver has completed delivery to {waypoint.address}',
57
- 'code' => 'completed',
58
- ],
59
- ]
60
- ]
61
- ];
62
-
63
3
  return [
64
4
  /*
65
5
  |--------------------------------------------------------------------------
@@ -159,600 +99,13 @@ return [
159
99
  'zone.deleted',
160
100
  ],
161
101
 
162
- /*
163
- |--------------------------------------------------------------------------
164
- | API Resource Types
165
- |--------------------------------------------------------------------------
166
- */
167
-
168
- 'types' => [
169
- 'contact' => [
170
- [
171
- 'name' => 'Customer',
172
- 'key' => 'customer',
173
- ],
174
- [
175
- 'name' => 'Contractor',
176
- 'key' => 'contractor',
177
- ],
178
- ],
179
-
180
- 'order' => [
181
- [
182
- 'name' => 'Transport',
183
- 'description' => 'Operational flow for standard A to B transport.',
184
- 'key' => 'default',
185
- 'meta_type' => 'order_config',
186
- 'meta' => [
187
- 'flow' => $defaultFlow,
188
- ],
189
- ],
190
- [
191
- 'name' => 'Parcel Delivery',
192
- 'description' => 'Operational flow for standard A to B parcel delivery, with proof of delivery options.',
193
- 'key' => 'parcel',
194
- 'meta_type' => 'order_config',
195
- 'meta' => [
196
- 'flow' => $defaultFlow,
197
- 'require_pod' => true,
198
- 'pod_method' => 'signature', // scan / signature
199
- ],
200
- ],
201
- [
202
- 'name' => 'Passenger Transport',
203
- 'description' => 'Operational flow for standard A to B passenger transport.',
204
- 'key' => 'passenger',
205
- 'meta_type' => 'order_config',
206
- 'meta' => [
207
- 'flow' => $defaultFlow,
208
- ],
209
- ],
210
- [
211
- 'name' => 'Task',
212
- 'description' => 'Operational flow for custom task or service tasks.',
213
- 'key' => 'task',
214
- 'meta_type' => 'order_config',
215
- 'meta' => [
216
- 'flow' => $defaultFlow,
217
- ],
218
- ],
219
- [
220
- 'name' => 'Food Delivery',
221
- 'description' => 'Operational flow for food delivery.',
222
- 'key' => 'food',
223
- 'meta_type' => 'order_config',
224
- 'meta' => [
225
- 'flow' => $defaultFlow,
226
- ],
227
- ],
228
- [
229
- 'name' => 'Ecommerce',
230
- 'description' => 'Operational flow for ondemand ecommerce.',
231
- 'key' => 'ecommerce',
232
- 'meta_type' => 'order_config',
233
- 'meta' => [
234
- 'flow' => $defaultFlow,
235
- ],
236
- ],
237
- [
238
- 'name' => 'Haulage',
239
- 'description' => 'Operational flow for freight container transport.',
240
- 'key' => 'haul',
241
- 'meta_type' => 'order_config',
242
- 'meta' => [
243
- 'fields' => [
244
- [
245
- 'label' => 'BL Number',
246
- 'key' => 'bl_number',
247
- 'type' => 'text',
248
- 'removable' => false,
249
- 'required' => true,
250
- 'group' => 'info',
251
- ],
252
- [
253
- 'label' => 'Job Type',
254
- 'key' => 'job_type',
255
- 'type' => 'select',
256
- 'options' => [
257
- [
258
- 'value' => 'import'
259
- ],
260
- [
261
- 'value' => 'export'
262
- ],
263
- [
264
- 'value' => 'one_way'
265
- ]
266
- ],
267
- 'removable' => false,
268
- 'required' => true,
269
- 'group' => 'info',
270
- ],
271
- [
272
- 'label' => 'DSTN Port',
273
- 'key' => 'dstn_port',
274
- 'type' => 'port',
275
- 'serialize' => 'model:port',
276
- 'removable' => false,
277
- 'required' => true,
278
- 'group' => 'info',
279
- ],
280
- [
281
- 'label' => 'Vessel',
282
- 'key' => 'vessel',
283
- 'type' => 'vessel',
284
- 'serialize' => 'model:vessel',
285
- 'removable' => false,
286
- 'required' => true,
287
- 'group' => 'vessel',
288
- ],
289
- [
290
- 'label' => 'Vessel ETA',
291
- 'key' => 'vessel_eta',
292
- 'type' => 'datetime',
293
- 'removable' => false,
294
- 'required' => true,
295
- 'group' => 'vessel',
296
- ],
297
- [
298
- 'label' => 'Vessel ETD',
299
- 'key' => 'vessel_etd',
300
- 'type' => 'datetime',
301
- 'removable' => false,
302
- 'required' => true,
303
- 'group' => 'vessel',
304
- ],
305
- [
306
- 'label' => 'Voyage Number',
307
- 'key' => 'voyage_number',
308
- 'type' => 'text',
309
- 'removable' => false,
310
- 'required' => true,
311
- 'group' => 'vessel',
312
- ],
313
- ],
314
- 'flow' => [
315
- 'created' => [
316
- 'sequence' => 0,
317
- 'color' => 'green',
318
- 'events' => [
319
- [
320
- 'if' => [['meta.job_type', '=', 'import']],
321
- 'status' => 'In port',
322
- 'details' => 'Driver has entered the port',
323
- 'code' => 'driver_started',
324
- ],
325
- [
326
- 'if' => [['meta.job_type', '=', 'export']],
327
- 'status' => 'In depot',
328
- 'details' => 'Driver has entered the depot',
329
- 'code' => 'driver_started',
330
- ],
331
- [
332
- 'if' => [['meta.job_type', '=', 'one_way']],
333
- 'status' => 'Container picked up',
334
- 'details' => 'Driver has picked up the container',
335
- 'code' => 'driver_started',
336
- ],
337
- ],
338
- ],
339
- 'driver_started' => [
340
- 'sequence' => 0,
341
- 'color' => 'green',
342
- 'events' => [
343
- [
344
- 'if' => [['meta.job_type', '=', 'import']],
345
- 'status' => 'Out port',
346
- 'details' => 'Laden container collected from the port',
347
- 'code' => 'container_collected',
348
- ],
349
- [
350
- 'if' => [['meta.job_type', '=', 'export']],
351
- 'status' => 'Out depot',
352
- 'details' => 'Driver has entered the depot',
353
- 'code' => 'container_collected',
354
- ],
355
- [
356
- 'if' => [['meta.job_type', '=', 'one_way']],
357
- 'status' => 'Container dropped off',
358
- 'details' => 'Driver has delivered the container',
359
- 'code' => 'container_sent',
360
- 'completed' => 1,
361
- ],
362
- ]
363
- ],
364
- 'container_collected' => [
365
- 'sequence' => 0,
366
- 'color' => 'green',
367
- 'events' => [
368
- [
369
- 'if' => [['meta.job_type', '=', 'import']],
370
- 'status' => 'With consignee',
371
- 'details' => 'Container with consignee',
372
- 'code' => 'container_unloading',
373
- ],
374
- [
375
- 'if' => [['meta.job_type', '=', 'export']],
376
- 'status' => 'With shipper',
377
- 'details' => 'Container with shipper',
378
- 'code' => 'container_loading',
379
- ],
380
- ]
381
- ],
382
- 'container_unloading' => [
383
- 'sequence' => 0,
384
- 'color' => 'green',
385
- 'events' => [
386
- [
387
- 'status' => 'Out consignee',
388
- 'details' => 'Container out of consignee',
389
- 'code' => 'container_returning',
390
- ],
391
- ]
392
- ],
393
- 'container_loading' => [
394
- 'sequence' => 0,
395
- 'color' => 'green',
396
- 'events' => [
397
- [
398
- 'status' => 'Out shipper',
399
- 'details' => 'Container out of shipper',
400
- 'code' => 'container_exporting',
401
- ],
402
- ]
403
- ],
404
- 'container_returning' => [
405
- 'sequence' => 0,
406
- 'color' => 'green',
407
- 'events' => [
408
- [
409
- 'status' => 'Returned to depot',
410
- 'details' => 'MT container returned to depot',
411
- 'code' => 'container_returned',
412
- 'completed' => 1,
413
- ],
414
- ]
415
- ],
416
- 'container_exporting' => [
417
- 'sequence' => 0,
418
- 'color' => 'green',
419
- 'events' => [
420
- [
421
- 'status' => 'In port',
422
- 'details' => 'Laden container sent for export',
423
- 'code' => 'container_sent',
424
- 'completed' => 1,
425
- ],
426
- ]
427
- ],
428
- ],
429
- 'entities' => [
430
- [
431
- 'name' => '20 FT FLAT RACK',
432
- 'type' => 'container',
433
- 'description' => '20FR',
434
- 'weight' => '16800',
435
- 'weight_unit' => 'kg',
436
- 'length' => '20',
437
- 'width' => '8.6',
438
- 'height' => '8.6',
439
- 'dimentions_unit' => 'ft',
440
- 'meta' => [
441
- 'type' => 'FR',
442
- ],
443
- ],
444
- [
445
- 'name' => '20 FT X 8\'6',
446
- 'type' => 'container',
447
- 'description' => '20GP',
448
- 'weight' => '16800',
449
- 'weight_unit' => 'kg',
450
- 'length' => '20',
451
- 'width' => '8.6',
452
- 'height' => '8.6',
453
- 'dimentions_unit' => 'ft',
454
- 'meta' => [
455
- 'type' => 'GP',
456
- ],
457
- ],
458
- [
459
- 'name' => '20 FT X 9\'6',
460
- 'type' => 'container',
461
- 'description' => '20HC',
462
- 'weight' => '16800',
463
- 'weight_unit' => 'kg',
464
- 'length' => '20',
465
- 'width' => '8.6',
466
- 'height' => '8.6',
467
- 'dimentions_unit' => 'ft',
468
- 'meta' => [
469
- 'type' => 'HC',
470
- ],
471
- ],
472
- [
473
- 'name' => '20 FT X 9\'6',
474
- 'type' => 'container',
475
- 'description' => '20HR',
476
- 'weight' => '16800',
477
- 'weight_unit' => 'kg',
478
- 'length' => '20',
479
- 'width' => '8.6',
480
- 'height' => '8.6',
481
- 'dimentions_unit' => 'ft',
482
- 'meta' => [
483
- 'type' => 'HR',
484
- ],
485
- ],
486
- [
487
- 'name' => '20 FT X 9\'6',
488
- 'type' => 'container',
489
- 'description' => '20OH',
490
- 'weight' => '16800',
491
- 'weight_unit' => 'kg',
492
- 'length' => '20',
493
- 'width' => '8.6',
494
- 'height' => '8.6',
495
- 'dimentions_unit' => 'ft',
496
- 'meta' => [
497
- 'type' => 'OH',
498
- ],
499
- ],
500
- [
501
- 'name' => '20 FT X 8\'6',
502
- 'type' => 'container',
503
- 'description' => '20OT',
504
- 'weight' => '16800',
505
- 'weight_unit' => 'kg',
506
- 'length' => '20',
507
- 'width' => '8.6',
508
- 'height' => '8.6',
509
- 'dimentions_unit' => 'ft',
510
- 'meta' => [
511
- 'type' => 'OT',
512
- ],
513
- ],
514
- [
515
- 'name' => '20 FT X 8\'6',
516
- 'type' => 'container',
517
- 'description' => '20RF',
518
- 'weight' => '16800',
519
- 'weight_unit' => 'kg',
520
- 'length' => '20',
521
- 'width' => '8.6',
522
- 'height' => '8.6',
523
- 'dimentions_unit' => 'ft',
524
- 'meta' => [
525
- 'type' => 'RF',
526
- ],
527
- ],
528
- [
529
- 'name' => '20 FT X 8\'6',
530
- 'type' => 'container',
531
- 'description' => '20TK',
532
- 'weight' => '16800',
533
- 'weight_unit' => 'kg',
534
- 'length' => '20',
535
- 'width' => '8.6',
536
- 'height' => '8.6',
537
- 'dimentions_unit' => 'ft',
538
- 'meta' => [
539
- 'type' => 'TK',
540
- ],
541
- ],
542
- [
543
- 'name' => '40 FT X 8\'6',
544
- 'type' => 'container',
545
- 'description' => '40FR',
546
- 'weight' => '16800',
547
- 'weight_unit' => 'kg',
548
- 'length' => '20',
549
- 'width' => '8.6',
550
- 'height' => '8.6',
551
- 'dimentions_unit' => 'ft',
552
- 'meta' => [
553
- 'type' => 'FR',
554
- ],
555
- ],
556
- [
557
- 'name' => '40 FT X 8\'6',
558
- 'type' => 'container',
559
- 'description' => '40GP',
560
- 'weight' => '16800',
561
- 'weight_unit' => 'kg',
562
- 'length' => '20',
563
- 'width' => '8.6',
564
- 'height' => '8.6',
565
- 'dimentions_unit' => 'ft',
566
- 'meta' => [
567
- 'type' => 'GP',
568
- ],
569
- ],
570
- [
571
- 'name' => '40 FT X 9\'6',
572
- 'type' => 'container',
573
- 'description' => '40HC',
574
- 'weight' => '16800',
575
- 'weight_unit' => 'kg',
576
- 'length' => '20',
577
- 'width' => '8.6',
578
- 'height' => '8.6',
579
- 'dimentions_unit' => 'ft',
580
- 'meta' => [
581
- 'type' => 'HC',
582
- ],
583
- ],
584
- [
585
- 'name' => '40 FT X 9\'6',
586
- 'type' => 'container',
587
- 'description' => '40HF',
588
- 'weight' => '16800',
589
- 'weight_unit' => 'kg',
590
- 'length' => '20',
591
- 'width' => '8.6',
592
- 'height' => '8.6',
593
- 'dimentions_unit' => 'ft',
594
- 'meta' => [
595
- 'type' => 'FR',
596
- ],
597
- ],
598
- [
599
- 'name' => '40 FT X 9\'6',
600
- 'type' => 'container',
601
- 'description' => '40HR',
602
- 'weight' => '16800',
603
- 'weight_unit' => 'kg',
604
- 'length' => '20',
605
- 'width' => '8.6',
606
- 'height' => '8.6',
607
- 'dimentions_unit' => 'ft',
608
- 'meta' => [
609
- 'type' => 'RF',
610
- ],
611
- ],
612
- [
613
- 'name' => '40 FT X 9\'6',
614
- 'type' => 'container',
615
- 'description' => '40HT',
616
- 'weight' => '16800',
617
- 'weight_unit' => 'kg',
618
- 'length' => '20',
619
- 'width' => '8.6',
620
- 'height' => '8.6',
621
- 'dimentions_unit' => 'ft',
622
- 'meta' => [
623
- 'type' => 'HT',
624
- ],
625
- ],
626
- [
627
- 'name' => '40 FT X 8\'6',
628
- 'type' => 'container',
629
- 'description' => '40OT',
630
- 'weight' => '16800',
631
- 'weight_unit' => 'kg',
632
- 'length' => '20',
633
- 'width' => '8.6',
634
- 'height' => '8.6',
635
- 'dimentions_unit' => 'ft',
636
- 'meta' => [
637
- 'type' => 'OT',
638
- ],
639
- ],
640
- [
641
- 'name' => 'PLAT FORM',
642
- 'type' => 'container',
643
- 'description' => '40PL',
644
- 'weight' => '16800',
645
- 'weight_unit' => 'kg',
646
- 'length' => '20',
647
- 'width' => '8.6',
648
- 'height' => '8.6',
649
- 'dimentions_unit' => 'ft',
650
- 'meta' => [
651
- 'type' => 'PL',
652
- ],
653
- ],
654
- [
655
- 'name' => '40 FT X 8\'6',
656
- 'type' => 'container',
657
- 'description' => '40RF',
658
- 'weight' => '16800',
659
- 'weight_unit' => 'kg',
660
- 'length' => '20',
661
- 'width' => '8.6',
662
- 'height' => '8.6',
663
- 'dimentions_unit' => 'ft',
664
- 'meta' => [
665
- 'type' => 'RF',
666
- ],
667
- ],
668
- [
669
- 'name' => '45 FT X 9\'611 GENERAL PURPOSE',
670
- 'type' => 'container',
671
- 'description' => '45GP',
672
- 'weight' => '16800',
673
- 'weight_unit' => 'kg',
674
- 'length' => '20',
675
- 'width' => '8.6',
676
- 'height' => '8.6',
677
- 'dimentions_unit' => 'ft',
678
- 'meta' => [
679
- 'type' => 'GP',
680
- ],
681
- ],
682
- [
683
- 'name' => '45 FT X 9\'611 HIGH CUBE',
684
- 'type' => 'container',
685
- 'description' => '45HC',
686
- 'weight' => '16800',
687
- 'weight_unit' => 'kg',
688
- 'length' => '20',
689
- 'width' => '8.6',
690
- 'height' => '8.6',
691
- 'dimentions_unit' => 'ft',
692
- 'meta' => [
693
- 'type' => 'HC',
694
- ],
695
- ],
696
- [
697
- 'name' => 'CHASSIS',
698
- 'type' => 'container',
699
- 'description' => 'CHASSIS',
700
- 'weight' => '16800',
701
- 'weight_unit' => 'kg',
702
- 'length' => '20',
703
- 'width' => '8.6',
704
- 'height' => '8.6',
705
- 'dimentions_unit' => 'ft',
706
- 'meta' => [
707
- 'type' => 'CHASSIS',
708
- ],
709
- ],
710
- ],
711
- ],
712
- ],
713
- ],
714
-
715
- 'entity' => [
716
- [
717
- 'name' => 'Parcel',
718
- 'key' => 'parcel',
719
- 'fields' => [''],
720
- ],
721
- [
722
- 'name' => 'Passenger',
723
- 'key' => 'passenger',
724
- 'fields' => [],
725
- ],
726
- [
727
- 'name' => 'Task',
728
- 'key' => 'task',
729
- 'fields' => [],
730
- ],
731
- [
732
- 'name' => 'Food',
733
- 'key' => 'food',
734
- 'fields' => [],
735
- ],
736
- [
737
- 'name' => 'Product',
738
- 'key' => 'product',
739
- 'fields' => [],
740
- ],
741
- [
742
- 'name' => 'Haulage',
743
- 'key' => 'haul',
744
- 'fields' => [],
745
- ],
746
- ],
747
- ],
748
-
749
102
  /*
750
103
  |--------------------------------------------------------------------------
751
104
  | Proof of Delivery Methods
752
105
  |--------------------------------------------------------------------------
753
106
  */
754
107
 
755
- 'pod_methods' => 'scan,signature',
108
+ 'pod_methods' => 'scan,signature,photo',
756
109
 
757
110
  /*
758
111
  |--------------------------------------------------------------------------
@@ -760,6 +113,6 @@ return [
760
113
  |--------------------------------------------------------------------------
761
114
  */
762
115
 
763
- 'versions' => ['2020-09-30'],
764
- 'version' => '2020-09-30', // current version
116
+ 'versions' => ['2020-09-30', '2024-03-12'],
117
+ 'version' => '2024-03-12',
765
118
  ];