@fleetbase/fleetops-engine 0.4.3 → 0.4.5
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.
- package/addon/components/contact-form-panel.hbs +1 -0
- package/addon/components/driver-panel.hbs +1 -0
- package/addon/components/edit-order-route-panel.hbs +183 -0
- package/addon/components/edit-order-route-panel.js +265 -0
- package/addon/components/fleet-form-panel.hbs +1 -0
- package/addon/components/fleet-panel.hbs +1 -0
- package/addon/components/fleet-panel.js +3 -3
- package/addon/components/fuel-report-form-panel.hbs +1 -0
- package/addon/components/fuel-report-panel.hbs +1 -0
- package/addon/components/issue-form-panel.hbs +1 -0
- package/addon/components/issue-panel.hbs +1 -0
- package/addon/components/map-container/toolbar.hbs +2 -2
- package/addon/components/modals/order-route-form.hbs +1 -1
- package/addon/components/place-form-panel.hbs +1 -0
- package/addon/components/place-panel.hbs +1 -0
- package/addon/components/vehicle-form-panel.hbs +1 -0
- package/addon/components/vehicle-panel.hbs +1 -0
- package/addon/components/vendor-form-panel.hbs +1 -0
- package/addon/components/vendor-panel.hbs +1 -0
- package/addon/components/widget/fleet-ops-key-metrics.hbs +19 -0
- package/addon/components/widget/fleet-ops-key-metrics.js +85 -0
- package/addon/controllers/operations/orders/index/new.js +66 -22
- package/addon/controllers/operations/orders/index/view.js +131 -126
- package/addon/controllers/operations/orders/index.js +1 -1
- package/addon/engine.js +18 -12
- package/addon/routes/operations/orders/index/view.js +1 -1
- package/addon/services/context-panel.js +6 -0
- package/addon/styles/fleetops-engine.css +7 -2
- package/addon/templates/operations/orders/index/new.hbs +390 -58
- package/addon/templates/operations/orders/index/view.hbs +135 -105
- package/addon/templates/operations/service-rates/index/new.hbs +3 -1
- package/app/components/widget/{issues.js → fleet-ops-key-metrics.js} +1 -1
- package/composer.json +6 -6
- package/extension.json +1 -1
- package/package.json +5 -6
- package/server/src/Casts/MultiPolygon.php +3 -3
- package/server/src/Casts/Point.php +2 -2
- package/server/src/Casts/Polygon.php +3 -3
- package/server/src/Console/Commands/DispatchAdhocOrders.php +1 -1
- package/server/src/Events/DriverSimulatedLocationChanged.php +1 -1
- package/server/src/Flow/Activity.php +12 -0
- package/server/src/Flow/Config.php +7 -0
- package/server/src/Flow/Logic.php +7 -0
- package/server/src/Http/Controllers/Api/v1/DriverController.php +61 -21
- package/server/src/Http/Controllers/Api/v1/OrderController.php +5 -3
- package/server/src/Http/Controllers/Api/v1/PlaceController.php +1 -1
- package/server/src/Http/Controllers/Api/v1/ServiceAreaController.php +1 -1
- package/server/src/Http/Controllers/Api/v1/TrackingStatusController.php +1 -1
- package/server/src/Http/Controllers/Api/v1/ZoneController.php +1 -1
- package/server/src/Http/Controllers/Internal/v1/DriverController.php +17 -4
- package/server/src/Http/Controllers/Internal/v1/GeocoderController.php +2 -2
- package/server/src/Http/Controllers/Internal/v1/MetricsController.php +6 -50
- package/server/src/Http/Controllers/Internal/v1/OrderController.php +13 -2
- package/server/src/Http/Controllers/Internal/v1/PlaceController.php +1 -1
- package/server/src/Http/Filter/PlaceFilter.php +1 -1
- package/server/src/Http/Resources/v1/Driver.php +1 -1
- package/server/src/Http/Resources/v1/FuelReport.php +1 -1
- package/server/src/Http/Resources/v1/Issue.php +1 -1
- package/server/src/Http/Resources/v1/Order.php +3 -0
- package/server/src/Http/Resources/v1/Payload.php +1 -0
- package/server/src/Http/Resources/v1/Place.php +1 -1
- package/server/src/Http/Resources/v1/PurchaseRate.php +2 -1
- package/server/src/Http/Resources/v1/ServiceQuote.php +1 -0
- package/server/src/Http/Resources/v1/ServiceQuoteItem.php +29 -0
- package/server/src/Http/Resources/v1/TrackingStatus.php +1 -1
- package/server/src/Http/Resources/v1/Vehicle.php +1 -1
- package/server/src/Http/Resources/v1/VehicleWithoutDriver.php +1 -1
- package/server/src/Http/Resources/v1/Waypoint.php +2 -4
- package/server/src/Integrations/Lalamove/LalamoveDeliveryStop.php +2 -2
- package/server/src/Jobs/SimulateWaypointReached.php +2 -2
- package/server/src/Models/Contact.php +6 -18
- package/server/src/Models/Driver.php +8 -20
- package/server/src/Models/Fleet.php +6 -25
- package/server/src/Models/FuelReport.php +1 -1
- package/server/src/Models/Issue.php +1 -1
- package/server/src/Models/Order.php +31 -19
- package/server/src/Models/Payload.php +7 -7
- package/server/src/Models/Place.php +16 -16
- package/server/src/Models/Position.php +1 -1
- package/server/src/Models/ServiceArea.php +14 -14
- package/server/src/Models/TrackingNumber.php +1 -1
- package/server/src/Models/TrackingStatus.php +1 -1
- package/server/src/Models/Vehicle.php +7 -19
- package/server/src/Models/VehicleDeviceEvent.php +1 -1
- package/server/src/Models/Vendor.php +8 -25
- package/server/src/Models/Waypoint.php +6 -6
- package/server/src/Models/Zone.php +8 -8
- package/server/src/Observers/DriverObserver.php +7 -2
- package/server/src/Observers/TrackingNumberObserver.php +1 -1
- package/server/src/Rules/ResolvablePoint.php +1 -1
- package/server/src/Support/Encoding/Polyline.php +1 -1
- package/server/src/Support/OSRM.php +1 -1
- package/server/src/Support/Utils.php +60 -60
- package/server/src/Traits/HasTrackingNumber.php +3 -3
- package/server/src/routes.php +2 -4
- package/translations/en-us.yaml +10 -2
- package/addon/components/widget/fleet-ops-quickstart.hbs +0 -40
- package/addon/components/widget/fleet-ops-quickstart.js +0 -59
- package/addon/components/widget/issues.hbs +0 -1
- package/addon/components/widget/key-metrics.hbs +0 -121
- package/addon/components/widget/key-metrics.js +0 -46
- package/addon/components/widget/live-order-map.hbs +0 -59
- package/addon/components/widget/live-order-map.js +0 -11
- package/addon/components/widget/recent-orders.hbs +0 -35
- package/addon/components/widget/recent-orders.js +0 -24
- package/addon/components/widget/transaction-earnings.hbs +0 -1
- package/addon/components/widget/transactions.hbs +0 -36
- package/addon/components/widget/transactions.js +0 -29
- package/addon/components/widget/weekly-orders.hbs +0 -1
- package/addon/components/widget/weekly-orders.js +0 -3
- package/app/components/widget/key-metrics.js +0 -1
- package/app/components/widget/live-order-map.js +0 -1
- package/app/components/widget/recent-orders.js +0 -1
- package/app/components/widget/transaction-earnings.js +0 -1
- package/app/components/widget/transactions.js +0 -1
- package/app/components/widget/weekly-orders.js +0 -1
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
<div class="quickstart-widget {{if this.isHidden 'hidden'}}" {{did-insert this.getTasks}} ...attributes>
|
|
2
|
-
<div class="shadow-sm content-panel">
|
|
3
|
-
<div class="content-panel-header">
|
|
4
|
-
<h3 class="text-sm font-bold dark:text-gray-100">
|
|
5
|
-
{{this.title}}
|
|
6
|
-
</h3>
|
|
7
|
-
</div>
|
|
8
|
-
<div class="text-sm content-panel-body no-padding dark:text-gray-100">
|
|
9
|
-
<div class="p-3">
|
|
10
|
-
{{#if this.isLoading}}
|
|
11
|
-
<div class="flex text-center items-center justify-center p-4">
|
|
12
|
-
<Spinner class="mr-2" />
|
|
13
|
-
<span>{{t "fleet-ops.component.widget.fleet-ops-quickstart.message"}}</span>
|
|
14
|
-
</div>
|
|
15
|
-
{{else}}
|
|
16
|
-
<div class="space-y-3">
|
|
17
|
-
{{#each-in this.tasks as |action task|}}
|
|
18
|
-
<div
|
|
19
|
-
class="rounded-md bg-gray-900 px-3 py-2 flex items-center justify-between space-x-2">
|
|
20
|
-
<div class="flex items-center">
|
|
21
|
-
<div class="mr-4">
|
|
22
|
-
<div class="text-center flex items-center justify-center w-6">
|
|
23
|
-
<FaIcon @icon={{if task.should "lightbulb-exclamation" "check-circle"}} class={{if task.should "text-yellow-400" "text-green-500"}} @size="lg" />
|
|
24
|
-
</div>
|
|
25
|
-
</div>
|
|
26
|
-
<div class="text-gray-100">{{task.description}}</div>
|
|
27
|
-
</div>
|
|
28
|
-
<div>
|
|
29
|
-
{{#if task.should}}
|
|
30
|
-
<a href="javascript:;" class="text-yellow-700 dark:text-yellow-700 hover:text-yellow-700 font-semibold underline" {{on "click" (fn this.startTask action)}}>{{t "fleet-ops.component.widget.fleet-ops-quickstart.start-task"}}</a>
|
|
31
|
-
{{/if}}
|
|
32
|
-
</div>
|
|
33
|
-
</div>
|
|
34
|
-
{{/each-in}}
|
|
35
|
-
</div>
|
|
36
|
-
{{/if}}
|
|
37
|
-
</div>
|
|
38
|
-
</div>
|
|
39
|
-
</div>
|
|
40
|
-
</div>
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import Component from '@glimmer/component';
|
|
2
|
-
import { tracked } from '@glimmer/tracking';
|
|
3
|
-
import { inject as service } from '@ember/service';
|
|
4
|
-
import { action, computed } from '@ember/object';
|
|
5
|
-
|
|
6
|
-
export default class WidgetFleetOpsQuickstartComponent extends Component {
|
|
7
|
-
@service intl;
|
|
8
|
-
@service fetch;
|
|
9
|
-
@service hostRouter;
|
|
10
|
-
@tracked tasks = {};
|
|
11
|
-
@tracked isLoading = true;
|
|
12
|
-
@tracked isHidden = false;
|
|
13
|
-
|
|
14
|
-
@computed('args.title') get title() {
|
|
15
|
-
return this.args.title || 'Quickstart tasks for Fleet Ops';
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
@action async getTasks() {
|
|
19
|
-
this.tasks = await this.fetchTasks();
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
@action startTask(action) {
|
|
23
|
-
switch (action) {
|
|
24
|
-
case 'add_drivers':
|
|
25
|
-
break;
|
|
26
|
-
case 'add_fleet':
|
|
27
|
-
break;
|
|
28
|
-
case 'add_order_config':
|
|
29
|
-
break;
|
|
30
|
-
case 'add_service_area':
|
|
31
|
-
break;
|
|
32
|
-
case 'add_users':
|
|
33
|
-
break;
|
|
34
|
-
case 'add_vehicles':
|
|
35
|
-
break;
|
|
36
|
-
case 'create_first_order':
|
|
37
|
-
break;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
fetchTasks() {
|
|
42
|
-
this.isLoading = true;
|
|
43
|
-
|
|
44
|
-
return new Promise((resolve) => {
|
|
45
|
-
this.fetch.get('actions/get-fleet-ops-quickstart-actions').then((tasks) => {
|
|
46
|
-
this.isLoading = false;
|
|
47
|
-
resolve(tasks);
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
shouldHideWidget(tasks) {
|
|
53
|
-
const shouldHide = Object.values(tasks).every((task) => task.should === false);
|
|
54
|
-
|
|
55
|
-
if (shouldHide) {
|
|
56
|
-
this.isHidden = true;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{{yield}}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
<div class="key-metrics-widget" {{did-insert this.getMetrics}} ...attributes>
|
|
2
|
-
<div class="flex items-center">
|
|
3
|
-
<h3 class="text-lg leading-6 font-medium text-gray-900 dark:text-gray-100 mr-2">
|
|
4
|
-
{{this.title}}
|
|
5
|
-
</h3>
|
|
6
|
-
{{#if this.isLoading}}
|
|
7
|
-
<div>
|
|
8
|
-
<Spinner class="text-sky-400" />
|
|
9
|
-
</div>
|
|
10
|
-
{{/if}}
|
|
11
|
-
</div>
|
|
12
|
-
<dl class="mt-5 grid grid-cols-1 gap-5 sm:grid-cols-2 md:grid-cols-4">
|
|
13
|
-
<div class="px-4 py-5 bg-white dark:bg-gray-900 shadow rounded-lg overflow-hidden sm:p-6">
|
|
14
|
-
<dt class="text-sm font-medium text-gray-500 dark:text-gray-100 truncate">
|
|
15
|
-
{{t "fleet-ops.component.widget.key-metrics.earnings"}}
|
|
16
|
-
</dt>
|
|
17
|
-
<dd class="mt-1 text-3xl font-semibold text-gray-900 dark:text-white">
|
|
18
|
-
{{format-currency this.metrics.earnings}}
|
|
19
|
-
</dd>
|
|
20
|
-
</div>
|
|
21
|
-
|
|
22
|
-
<div class="px-4 py-5 bg-white dark:bg-gray-900 shadow rounded-lg overflow-hidden sm:p-6">
|
|
23
|
-
<dt class="text-sm font-medium text-gray-500 dark:text-gray-100 truncate">
|
|
24
|
-
{{t "fleet-ops.component.widget.key-metrics.fuel-expenses"}}
|
|
25
|
-
</dt>
|
|
26
|
-
<dd class="mt-1 text-3xl font-semibold text-gray-900 dark:text-white">
|
|
27
|
-
{{format-currency this.metrics.fuel_cost}}
|
|
28
|
-
</dd>
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
<div class="px-4 py-5 bg-white dark:bg-gray-900 shadow rounded-lg overflow-hidden sm:p-6">
|
|
32
|
-
<dt class="text-sm font-medium text-gray-500 dark:text-gray-100 truncate">
|
|
33
|
-
{{t "fleet-ops.component.widget.key-metrics.traveled"}}
|
|
34
|
-
</dt>
|
|
35
|
-
<dd class="mt-1 text-3xl font-semibold text-gray-900 dark:text-white">
|
|
36
|
-
{{format-meters this.metrics.distance_traveled}}
|
|
37
|
-
</dd>
|
|
38
|
-
</div>
|
|
39
|
-
|
|
40
|
-
<div class="px-4 py-5 bg-white dark:bg-gray-900 shadow rounded-lg overflow-hidden sm:p-6">
|
|
41
|
-
<dt class="text-sm font-medium text-gray-500 dark:text-gray-100 truncate">
|
|
42
|
-
{{t "fleet-ops.component.widget.key-metrics.total-time"}}
|
|
43
|
-
</dt>
|
|
44
|
-
<dd class="mt-1 text-3xl font-semibold text-gray-900 dark:text-white">
|
|
45
|
-
{{format-duration this.metrics.total_time_traveled}}
|
|
46
|
-
</dd>
|
|
47
|
-
</div>
|
|
48
|
-
|
|
49
|
-
<div class="px-4 py-5 bg-white dark:bg-gray-900 shadow rounded-lg overflow-hidden sm:p-6">
|
|
50
|
-
<dt class="text-sm font-medium text-gray-500 dark:text-gray-100 truncate">
|
|
51
|
-
{{t "fleet-ops.component.widget.key-metrics.order-scheduled"}}
|
|
52
|
-
</dt>
|
|
53
|
-
<dd class="mt-1 text-3xl font-semibold text-gray-900 dark:text-white">
|
|
54
|
-
{{this.metrics.orders_scheduled}}
|
|
55
|
-
</dd>
|
|
56
|
-
</div>
|
|
57
|
-
|
|
58
|
-
<div class="px-4 py-5 bg-white dark:bg-gray-900 shadow rounded-lg overflow-hidden sm:p-6">
|
|
59
|
-
<dt class="text-sm font-medium text-gray-500 dark:text-gray-100 truncate">
|
|
60
|
-
{{t "fleet-ops.component.widget.key-metrics.order-completed"}}
|
|
61
|
-
</dt>
|
|
62
|
-
<dd class="mt-1 text-3xl font-semibold text-gray-900 dark:text-white">
|
|
63
|
-
{{this.metrics.orders_completed}}
|
|
64
|
-
</dd>
|
|
65
|
-
</div>
|
|
66
|
-
|
|
67
|
-
<div class="px-4 py-5 bg-white dark:bg-gray-900 shadow rounded-lg overflow-hidden sm:p-6">
|
|
68
|
-
<dt class="text-sm font-medium text-gray-500 dark:text-gray-100 truncate">
|
|
69
|
-
{{t "fleet-ops.component.widget.key-metrics.order-progress"}}
|
|
70
|
-
</dt>
|
|
71
|
-
<dd class="mt-1 text-3xl font-semibold text-gray-900 dark:text-white">
|
|
72
|
-
{{this.metrics.orders_in_progress}}
|
|
73
|
-
</dd>
|
|
74
|
-
</div>
|
|
75
|
-
|
|
76
|
-
<div class="px-4 py-5 bg-white dark:bg-gray-900 shadow rounded-lg overflow-hidden sm:p-6">
|
|
77
|
-
<dt class="text-sm font-medium text-gray-500 dark:text-gray-100 truncate">
|
|
78
|
-
{{t "fleet-ops.component.widget.key-metrics.order-canceled"}}
|
|
79
|
-
</dt>
|
|
80
|
-
<dd class="mt-1 text-3xl font-semibold text-gray-900 dark:text-white">
|
|
81
|
-
{{this.metrics.orders_canceled}}
|
|
82
|
-
</dd>
|
|
83
|
-
</div>
|
|
84
|
-
|
|
85
|
-
<div class="px-4 py-5 bg-white dark:bg-gray-900 shadow rounded-lg overflow-hidden sm:p-6">
|
|
86
|
-
<dt class="text-sm font-medium text-gray-500 dark:text-gray-100 truncate">
|
|
87
|
-
{{t "fleet-ops.component.widget.key-metrics.driver-online"}}
|
|
88
|
-
</dt>
|
|
89
|
-
<dd class="mt-1 text-3xl font-semibold text-gray-900 dark:text-white">
|
|
90
|
-
{{this.metrics.drivers_online}}
|
|
91
|
-
</dd>
|
|
92
|
-
</div>
|
|
93
|
-
|
|
94
|
-
<div class="px-4 py-5 bg-white dark:bg-gray-900 shadow rounded-lg overflow-hidden sm:p-6">
|
|
95
|
-
<dt class="text-sm font-medium text-gray-500 dark:text-gray-100 truncate">
|
|
96
|
-
{{t "fleet-ops.component.widget.key-metrics.customers"}}
|
|
97
|
-
</dt>
|
|
98
|
-
<dd class="mt-1 text-3xl font-semibold text-gray-900 dark:text-white">
|
|
99
|
-
{{this.metrics.customers}}
|
|
100
|
-
</dd>
|
|
101
|
-
</div>
|
|
102
|
-
|
|
103
|
-
<div class="px-4 py-5 bg-white dark:bg-gray-900 shadow rounded-lg overflow-hidden sm:p-6">
|
|
104
|
-
<dt class="text-sm font-medium text-gray-500 dark:text-gray-100 truncate">
|
|
105
|
-
{{t "fleet-ops.component.widget.key-metrics.open-issue"}}
|
|
106
|
-
</dt>
|
|
107
|
-
<dd class="mt-1 text-3xl font-semibold text-gray-900 dark:text-white">
|
|
108
|
-
{{this.metrics.open_issues}}
|
|
109
|
-
</dd>
|
|
110
|
-
</div>
|
|
111
|
-
|
|
112
|
-
<div class="px-4 py-5 bg-white dark:bg-gray-900 shadow rounded-lg overflow-hidden sm:p-6">
|
|
113
|
-
<dt class="text-sm font-medium text-gray-500 dark:text-gray-100 truncate">
|
|
114
|
-
{{t "fleet-ops.component.widget.key-metrics.closed-issues"}}
|
|
115
|
-
</dt>
|
|
116
|
-
<dd class="mt-1 text-3xl font-semibold text-gray-900 dark:text-white">
|
|
117
|
-
{{this.metrics.resolved_issues}}
|
|
118
|
-
</dd>
|
|
119
|
-
</div>
|
|
120
|
-
</dl>
|
|
121
|
-
</div>
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import Component from '@glimmer/component';
|
|
2
|
-
import { tracked } from '@glimmer/tracking';
|
|
3
|
-
import { inject as service } from '@ember/service';
|
|
4
|
-
import { action, computed } from '@ember/object';
|
|
5
|
-
import moment from 'moment';
|
|
6
|
-
|
|
7
|
-
export default class WidgetKeyMetricsComponent extends Component {
|
|
8
|
-
@service fetch;
|
|
9
|
-
@tracked metrics = {
|
|
10
|
-
distance_traveled: 0,
|
|
11
|
-
total_time_traveled: 0,
|
|
12
|
-
drivers_online: 0,
|
|
13
|
-
customers: 0,
|
|
14
|
-
earnings: 0,
|
|
15
|
-
fuel_cost: 0,
|
|
16
|
-
orders_canceled: 0,
|
|
17
|
-
orders_completed: 0,
|
|
18
|
-
orders_in_progress: 0,
|
|
19
|
-
orders_scheduled: 0,
|
|
20
|
-
open_issues: 0,
|
|
21
|
-
resolved_issues: 0,
|
|
22
|
-
};
|
|
23
|
-
@tracked isLoading = true;
|
|
24
|
-
|
|
25
|
-
@computed('args.title') get title() {
|
|
26
|
-
return this.args.title || 'This Month';
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
@action async getMetrics() {
|
|
30
|
-
const start = moment().startOf('month').toString();
|
|
31
|
-
const end = moment().endOf('month').toString();
|
|
32
|
-
|
|
33
|
-
this.metrics = await this.fetchMetrics(start, end);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
fetchMetrics(start, end) {
|
|
37
|
-
this.isLoading = true;
|
|
38
|
-
|
|
39
|
-
return new Promise((resolve) => {
|
|
40
|
-
this.fetch.get('actions/get-fleet-ops-key-metrics', { start, end }).then((metrics) => {
|
|
41
|
-
this.isLoading = false;
|
|
42
|
-
resolve(metrics);
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
<div class="shadow-sm content-panel">
|
|
2
|
-
<div class="content-panel-header">
|
|
3
|
-
<h3 class="text-sm font-bold dark:text-gray-100">
|
|
4
|
-
{{this.title}}
|
|
5
|
-
</h3>
|
|
6
|
-
</div>
|
|
7
|
-
<div class="text-sm content-panel-body no-padding dark:text-gray-100">
|
|
8
|
-
<div class="grid grid-cols-8">
|
|
9
|
-
<div class="col-span-5 border-r border-gray-900">
|
|
10
|
-
<LiveMap @mapClass="z-0 shadow-md rounded-bl h-screen-40 w-full" @onReady={{fn (mut this.isLoading) false}} @onRoutesLoaded={{fn (mut this.routes)}} />
|
|
11
|
-
</div>
|
|
12
|
-
|
|
13
|
-
<div class="col-span-3">
|
|
14
|
-
<div class="dark:border-gray-900 bg-gray-100 dark:bg-gray-800 shadow-sm">
|
|
15
|
-
{{#if this.isLoading}}
|
|
16
|
-
<div class="flex text-center items-center justify-center p-4">
|
|
17
|
-
<Spinner class="mr-2" />
|
|
18
|
-
<span>{{t "fleet-ops.component.widget.live-order-map.loading"}}</span>
|
|
19
|
-
</div>
|
|
20
|
-
{{else}}
|
|
21
|
-
{{#each this.routes as |route|}}
|
|
22
|
-
<div class="border-b border-gray-900 px-3 py-2">
|
|
23
|
-
<div class="flex justify-between">
|
|
24
|
-
<div class="flex-1">
|
|
25
|
-
<div class="flex justify-between border border-gray-900 bg-gray-900 shadow-sm rounded-md px-3 py-2 mb-6">
|
|
26
|
-
<div>
|
|
27
|
-
<h4 class="font-semibold mb-2">{{route.order_public_id}}</h4>
|
|
28
|
-
<Badge @status={{route.order_status}} @helpText={{concat "Dispatched at " route.order_dispatched_at}} />
|
|
29
|
-
</div>
|
|
30
|
-
<div>
|
|
31
|
-
<div>
|
|
32
|
-
<div class="mb-1 text-xs text-gray-100">{{t "fleet-ops.component.widget.live-order-map.assigned"}}</div>
|
|
33
|
-
<DriverCardMini @driver={{route.driver}} />
|
|
34
|
-
</div>
|
|
35
|
-
</div>
|
|
36
|
-
</div>
|
|
37
|
-
<div>
|
|
38
|
-
<HorizontalRoute @payload={{route.payload}} />
|
|
39
|
-
</div>
|
|
40
|
-
</div>
|
|
41
|
-
</div>
|
|
42
|
-
</div>
|
|
43
|
-
{{else}}
|
|
44
|
-
<div class="h-70 p-3 flex flex-col items-center justify-center">
|
|
45
|
-
<div class="mb-4">
|
|
46
|
-
<FaIcon @icon="satellite-dish" @size="3x" />
|
|
47
|
-
</div>
|
|
48
|
-
<div class="dark:text-gray-100 text-center">
|
|
49
|
-
<div class="font-semibold text-lg mb-2">{{t "fleet-ops.component.widget.live-order-map.no-order"}}</div>
|
|
50
|
-
<p class="">{{t "fleet-ops.component.widget.live-order-map.message"}}</p>
|
|
51
|
-
</div>
|
|
52
|
-
</div>
|
|
53
|
-
{{/each}}
|
|
54
|
-
{{/if}}
|
|
55
|
-
</div>
|
|
56
|
-
</div>
|
|
57
|
-
</div>
|
|
58
|
-
</div>
|
|
59
|
-
</div>
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import Component from '@glimmer/component';
|
|
2
|
-
import { tracked } from '@glimmer/tracking';
|
|
3
|
-
import { computed } from '@ember/object';
|
|
4
|
-
|
|
5
|
-
export default class WidgetLiveOrderMapComponent extends Component {
|
|
6
|
-
@tracked routes = [];
|
|
7
|
-
@tracked isLoading = false;
|
|
8
|
-
@computed('args.title') get title() {
|
|
9
|
-
return this.args.title || 'Live Orders';
|
|
10
|
-
}
|
|
11
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
<div class="recent-orders-widget" {{did-insert this.getRecentOrders}} ...attributes>
|
|
2
|
-
<div class="shadow-sm content-panel">
|
|
3
|
-
<div class="content-panel-header">
|
|
4
|
-
<h3 class="text-sm font-bold dark:text-gray-100">
|
|
5
|
-
{{t "fleet-ops.component.widget.recent-orders.title"}}
|
|
6
|
-
</h3>
|
|
7
|
-
</div>
|
|
8
|
-
<div class="text-sm content-panel-body no-padding dark:text-gray-100">
|
|
9
|
-
{{#if this.isLoading}}
|
|
10
|
-
<div class="flex text-center items-center justify-center p-4">
|
|
11
|
-
{{t "fleet-ops.component.widget.recent-orders.loading"}}
|
|
12
|
-
</div>
|
|
13
|
-
{{else}}
|
|
14
|
-
{{#each this.recentOrders as |order|}}
|
|
15
|
-
<div class="p-4 border-b border-gray-900 flex justify-between items-center">
|
|
16
|
-
<div>{{order.public_id}}</div>
|
|
17
|
-
<div>
|
|
18
|
-
<Badge @status={{order.status}} />
|
|
19
|
-
</div>
|
|
20
|
-
</div>
|
|
21
|
-
{{else}}
|
|
22
|
-
<div class="h-64 p-8 flex flex-col items-center justify-center">
|
|
23
|
-
<div class="mb-4">
|
|
24
|
-
<FaIcon @icon="calendar-exclamation" @size="3x" />
|
|
25
|
-
</div>
|
|
26
|
-
<div class="dark:text-gray-100 text-center">
|
|
27
|
-
<div class="font-semibold text-lg mb-2">{{t "fleet-ops.component.widget.recent-orders.no-orders"}}</div>
|
|
28
|
-
<p class="">{{t "fleet-ops.component.widget.recent-orders.message-part-1"}} <LinkTo @route="operations.orders.index.new">{{t "fleet-ops.component.widget.recent-orders.message-part-2"}}</LinkTo> {{t "fleet-ops.component.widget.recent-orders.message-part-3"}}</p>
|
|
29
|
-
</div>
|
|
30
|
-
</div>
|
|
31
|
-
{{/each}}
|
|
32
|
-
{{/if}}
|
|
33
|
-
</div>
|
|
34
|
-
</div>
|
|
35
|
-
</div>
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import Component from '@glimmer/component';
|
|
2
|
-
import { tracked } from '@glimmer/tracking';
|
|
3
|
-
import { inject as service } from '@ember/service';
|
|
4
|
-
import { action } from '@ember/object';
|
|
5
|
-
import moment from 'moment';
|
|
6
|
-
|
|
7
|
-
export default class WidgetRecentOrdersComponent extends Component {
|
|
8
|
-
@service store;
|
|
9
|
-
@tracked recentOrders = [];
|
|
10
|
-
@tracked isLoading = false;
|
|
11
|
-
@action async getRecentOrders() {
|
|
12
|
-
const start = moment().startOf('week').toString();
|
|
13
|
-
const end = moment().endOf('week').toString();
|
|
14
|
-
|
|
15
|
-
this.isLoading = true;
|
|
16
|
-
const recentOrders = await this.store.query('order', {
|
|
17
|
-
limit: 12,
|
|
18
|
-
after: start,
|
|
19
|
-
before: end,
|
|
20
|
-
});
|
|
21
|
-
this.isLoading = false;
|
|
22
|
-
this.recentOrders = recentOrders;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{{yield}}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
<div class="recent-orders-widget" {{did-insert this.getRecentTransactions}} ...attributes>
|
|
2
|
-
<div class="shadow-sm content-panel">
|
|
3
|
-
<div class="content-panel-header">
|
|
4
|
-
<h3 class="text-sm font-bold dark:text-gray-100">
|
|
5
|
-
{{t "fleet-ops.component.widget.transactions.title"}}
|
|
6
|
-
</h3>
|
|
7
|
-
</div>
|
|
8
|
-
<div class="text-sm content-panel-body no-padding dark:text-gray-100">
|
|
9
|
-
{{#if this.isLoading}}
|
|
10
|
-
<div class="flex text-center items-center justify-center p-4">
|
|
11
|
-
<Spinner class="mr-2" />
|
|
12
|
-
<span>{{t "fleet-ops.component.widget.transactions.loading"}}</span>
|
|
13
|
-
</div>
|
|
14
|
-
{{else}}
|
|
15
|
-
{{#each this.recentTransactions as |transaction|}}
|
|
16
|
-
<div class="p-4 border-b border-gray-900 flex justify-between items-center">
|
|
17
|
-
<div>{{transaction.public_id}}</div>
|
|
18
|
-
<div>
|
|
19
|
-
<Badge @status={{transaction.status}} />
|
|
20
|
-
</div>
|
|
21
|
-
</div>
|
|
22
|
-
{{else}}
|
|
23
|
-
<div class="h-64 p-8 flex flex-col items-center justify-center">
|
|
24
|
-
<div class="mb-4">
|
|
25
|
-
<FaIcon @icon="funnel-dollar" @size="3x" />
|
|
26
|
-
</div>
|
|
27
|
-
<div class="dark:text-gray-100 text-center">
|
|
28
|
-
<div class="font-semibold text-lg mb-2">{{t "fleet-ops.component.widget.transactions.no-transactions"}}</div>
|
|
29
|
-
<p class="">{{t "fleet-ops.component.widget.transactions.message"}}</p>
|
|
30
|
-
</div>
|
|
31
|
-
</div>
|
|
32
|
-
{{/each}}
|
|
33
|
-
{{/if}}
|
|
34
|
-
</div>
|
|
35
|
-
</div>
|
|
36
|
-
</div>
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import Component from '@glimmer/component';
|
|
2
|
-
import { tracked } from '@glimmer/tracking';
|
|
3
|
-
import { inject as service } from '@ember/service';
|
|
4
|
-
import { action } from '@ember/object';
|
|
5
|
-
import moment from 'moment';
|
|
6
|
-
|
|
7
|
-
export default class WidgetTransactionsComponent extends Component {
|
|
8
|
-
@service store;
|
|
9
|
-
@tracked recentTransactions = [];
|
|
10
|
-
@tracked isLoading = true;
|
|
11
|
-
|
|
12
|
-
@action async getRecentTransactions() {
|
|
13
|
-
const start = moment().startOf('week').toString();
|
|
14
|
-
const end = moment().endOf('week').toString();
|
|
15
|
-
|
|
16
|
-
this.recentTransactions = await this.fetchTransactions(start, end);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
fetchTransactions(after, before) {
|
|
20
|
-
this.isLoading = true;
|
|
21
|
-
|
|
22
|
-
return new Promise((resolve) => {
|
|
23
|
-
this.store.query('transaction', { limit: 12, after, before }).then((recentTransactions) => {
|
|
24
|
-
this.isLoading = false;
|
|
25
|
-
resolve(recentTransactions);
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{{yield}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default } from '@fleetbase/fleetops-engine/components/widget/key-metrics';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default } from '@fleetbase/fleetops-engine/components/widget/live-order-map';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default } from '@fleetbase/fleetops-engine/components/widget/recent-orders';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default } from '@fleetbase/fleetops-engine/components/widget/transaction-earnings';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default } from '@fleetbase/fleetops-engine/components/widget/transactions';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default } from '@fleetbase/fleetops-engine/components/widget/weekly-orders';
|