@fleetbase/fleetops-engine 0.3.3 → 0.3.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 +28 -6
- package/addon/components/driver-form-panel.hbs +10 -0
- package/addon/components/driver-form-panel.js +51 -0
- package/addon/components/driver-panel/details.hbs +1 -5
- package/addon/components/driver-panel.hbs +21 -3
- package/addon/components/fleet-form-panel.hbs +60 -6
- package/addon/components/fleet-listing-panel.hbs +2 -2
- package/addon/components/fleet-panel/details.hbs +1 -1
- package/addon/components/fuel-report-form-panel.hbs +84 -8
- package/addon/components/fuel-report-form-panel.js +6 -0
- package/addon/components/fuel-report-panel/details.hbs +4 -0
- package/addon/components/issue-form-panel.hbs +99 -11
- package/addon/components/issue-form-panel.js +5 -13
- package/addon/components/layout/fleet-ops-sidebar/fleet-listing.hbs +1 -0
- package/addon/components/layout/fleet-ops-sidebar/fleet-listing.js +3 -0
- package/addon/components/layout/fleet-ops-sidebar.hbs +4 -4
- package/addon/components/layout/fleet-ops-sidebar.js +10 -0
- package/addon/components/live-map-drawer.hbs +1 -1
- package/addon/components/live-map.hbs +1 -1
- package/addon/components/modals/driver-assign-vehicle.hbs +2 -11
- package/addon/components/modals/driver-assign-vendor.hbs +1 -9
- package/addon/components/modals/fuel-report-details.hbs +4 -0
- package/addon/components/order/schedule-card.hbs +32 -4
- package/addon/components/order/schedule-card.js +155 -5
- package/addon/components/place-form-panel.hbs +14 -7
- package/addon/components/place-form-panel.js +71 -0
- package/addon/components/place-panel/details.hbs +9 -19
- package/addon/components/vehicle-form-panel.hbs +67 -7
- package/addon/components/vehicle-form-panel.js +37 -0
- package/addon/components/vehicle-panel/details.hbs +9 -5
- package/addon/components/vehicle-panel.hbs +18 -4
- package/addon/components/vendor-form-panel/create-form.hbs +72 -11
- package/addon/components/vendor-form-panel/edit-form.hbs +1 -1
- package/addon/components/vendor-form-panel.hbs +70 -30
- package/addon/components/vendor-form-panel.js +4 -40
- package/addon/components/vendor-panel/details.hbs +2 -2
- package/addon/components/vendor-panel.hbs +16 -2
- package/addon/controllers/management/contacts/index.js +49 -3
- package/addon/controllers/management/drivers/index.js +7 -0
- package/addon/controllers/management/fleets/index.js +19 -23
- package/addon/controllers/management/fuel-reports/index/new.js +1 -1
- package/addon/controllers/management/fuel-reports/index.js +80 -20
- package/addon/controllers/management/issues/index/new.js +2 -2
- package/addon/controllers/management/issues/index.js +72 -45
- package/addon/controllers/management/places/index.js +65 -18
- package/addon/controllers/management/vehicles/index.js +56 -4
- package/addon/controllers/management/vendors/index.js +70 -8
- package/addon/controllers/operations/orders/index.js +42 -1
- package/addon/controllers/operations/service-rates/index.js +7 -0
- package/addon/routes/management/contacts/index.js +8 -0
- package/addon/routes/management/fleets/index.js +8 -2
- package/addon/routes/management/fuel-reports/index.js +6 -0
- package/addon/routes/management/issues/index.js +9 -1
- package/addon/routes/management/places/index.js +11 -1
- package/addon/routes/management/vehicles/index.js +1 -1
- package/addon/routes/management/vendors/index.js +8 -0
- package/addon/routes/operations/scheduler/index.js +1 -1
- package/addon/templates/management/contacts/index.hbs +1 -0
- package/addon/templates/management/drivers/index.hbs +2 -1
- package/addon/templates/management/fleets/index.hbs +23 -3
- package/addon/templates/management/fuel-reports/index.hbs +1 -0
- package/addon/templates/management/issues/index.hbs +22 -2
- package/addon/templates/management/places/index.hbs +9 -1
- package/addon/templates/management/vehicles/index.hbs +22 -2
- package/addon/templates/management/vendors/index.hbs +22 -2
- package/addon/templates/operations/orders/index.hbs +1 -1
- package/addon/templates/operations/service-rates/index.hbs +11 -3
- package/addon/utils/get-issue-categories.js +30 -0
- package/addon/utils/get-issue-types.js +3 -0
- package/addon/utils/get-vendor-status-options.js +3 -0
- package/addon/utils/get-vendor-type-options.js +41 -0
- package/app/components/layout/fleet-ops-sidebar/fleet-listing.js +1 -0
- package/app/utils/get-issue-categories.js +1 -0
- package/app/utils/get-issue-types.js +1 -0
- package/app/utils/get-vendor-categories.js +1 -0
- package/app/utils/get-vendor-status-options.js +1 -0
- package/app/utils/get-vendor-type-options.js +1 -0
- package/app/utils/get-vendor-types.js +1 -0
- package/composer.json +1 -1
- package/extension.json +1 -1
- package/package.json +4 -4
- package/server/migrations/2023_04_27_053456_create_contacts_table.php +2 -2
- package/server/migrations/2023_04_27_053456_create_drivers_table.php +5 -5
- package/server/migrations/2023_04_27_053456_create_entities_table.php +5 -5
- package/server/migrations/2023_04_27_053456_create_fleet_drivers_table.php +2 -2
- package/server/migrations/2023_04_27_053456_create_fleets_table.php +3 -3
- package/server/migrations/2023_04_27_053456_create_fuel_reports_table.php +3 -3
- package/server/migrations/2023_04_27_053456_create_issues_table.php +4 -4
- package/server/migrations/2023_04_27_053456_create_orders_table.php +8 -8
- package/server/migrations/2023_04_27_053456_create_payloads_table.php +5 -5
- package/server/migrations/2023_04_27_053456_create_places_table.php +1 -1
- package/server/migrations/2023_04_27_053456_create_purchase_rates_table.php +4 -4
- package/server/migrations/2023_04_27_053456_create_service_areas_table.php +2 -2
- package/server/migrations/2023_04_27_053456_create_service_quote_items_table.php +1 -1
- package/server/migrations/2023_04_27_053456_create_service_quotes_table.php +3 -3
- package/server/migrations/2023_04_27_053456_create_service_rate_fees_table.php +1 -1
- package/server/migrations/2023_04_27_053456_create_service_rate_parcel_fees_table.php +1 -1
- package/server/migrations/2023_04_27_053456_create_service_rates_table.php +3 -3
- package/server/migrations/2023_04_27_053456_create_tracking_numbers_table.php +3 -3
- package/server/migrations/2023_04_27_053456_create_tracking_statuses_table.php +2 -2
- package/server/migrations/2023_04_27_053456_create_vehicles_table.php +3 -3
- package/server/migrations/2023_04_27_053456_create_vendors_table.php +5 -5
- package/server/migrations/2023_04_27_053456_create_waypoints_table.php +4 -4
- package/server/migrations/2023_04_27_053456_create_zones_table.php +2 -2
- package/server/migrations/2023_11_09_041807_add_status_column_to_fuel_reports_table.php +32 -0
- package/server/migrations/2023_11_15_062814_add_comments_column_and_resolved_at_column_to_vehicle_device_events_table.php +33 -0
- package/server/migrations/2023_11_17_053001_add_category_uuid_to_entities_table.php +33 -0
- package/server/src/Http/Controllers/Api/v1/DriverController.php +2 -2
- package/server/src/Http/Controllers/Api/v1/EntityController.php +2 -0
- package/server/src/Http/Controllers/Api/v1/VehicleController.php +2 -2
- package/server/src/Http/Controllers/Internal/v1/DriverController.php +5 -14
- package/server/src/Http/Controllers/Internal/v1/OrderController.php +1 -3
- package/server/src/Http/Filter/ContactFilter.php +10 -0
- package/server/src/Http/Filter/FleetFilter.php +8 -6
- package/server/src/Http/Filter/FuelReportFilter.php +51 -0
- package/server/src/Http/Filter/IssueFilter.php +61 -5
- package/server/src/Http/Filter/PlaceFilter.php +48 -6
- package/server/src/Http/Filter/VehicleFilter.php +21 -6
- package/server/src/Http/Filter/VendorFilter.php +11 -8
- package/server/src/Http/Middleware/TransformLocationMiddleware.php +1 -1
- package/server/src/Http/Resources/Internal/v1/IntegratedVendorFacilitator.php +17 -18
- package/server/src/Http/Resources/v1/Contact.php +16 -19
- package/server/src/Http/Resources/v1/CurrentJob.php +13 -16
- package/server/src/Http/Resources/v1/Driver.php +59 -57
- package/server/src/Http/Resources/v1/Entity.php +30 -33
- package/server/src/Http/Resources/v1/Fleet.php +19 -17
- package/server/src/Http/Resources/v1/FuelReport.php +16 -14
- package/server/src/Http/Resources/v1/Order.php +1 -1
- package/server/src/Http/Resources/v1/Payload.php +21 -24
- package/server/src/Http/Resources/v1/Place.php +27 -30
- package/server/src/Http/Resources/v1/Proof.php +13 -16
- package/server/src/Http/Resources/v1/PurchaseRate.php +14 -17
- package/server/src/Http/Resources/v1/ServiceArea.php +13 -16
- package/server/src/Http/Resources/v1/ServiceQuote.php +15 -18
- package/server/src/Http/Resources/v1/ServiceRate.php +33 -36
- package/server/src/Http/Resources/v1/ServiceRateFee.php +14 -17
- package/server/src/Http/Resources/v1/ServiceRateParcelFee.php +9 -12
- package/server/src/Http/Resources/v1/TrackingNumber.php +18 -21
- package/server/src/Http/Resources/v1/TrackingStatus.php +18 -21
- package/server/src/Http/Resources/v1/Vehicle.php +31 -34
- package/server/src/Http/Resources/v1/VehicleDevice.php +23 -25
- package/server/src/Http/Resources/v1/VehicleWithoutDriver.php +38 -32
- package/server/src/Http/Resources/v1/Vendor.php +31 -26
- package/server/src/Http/Resources/v1/Zone.php +14 -17
- package/server/src/Models/Driver.php +23 -1
- package/server/src/Models/Entity.php +18 -23
- package/server/src/Models/FuelReport.php +1 -0
- package/server/src/Models/IntegratedVendor.php +6 -1
- package/server/src/Models/Order.php +2 -2
- package/server/src/Models/Place.php +2 -2
- package/server/src/Models/Vehicle.php +4 -2
- package/server/src/Models/VehicleDeviceEvent.php +1 -0
- package/server/src/Models/Vendor.php +1 -1
- package/server/src/Observers/DriverObserver.php +15 -0
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
<Overlay
|
|
1
|
+
<Overlay
|
|
2
|
+
@onLoad={{this.setOverlayContext}}
|
|
3
|
+
@position="right"
|
|
4
|
+
@noBackdrop={{true}}
|
|
5
|
+
@fullHeight={{true}}
|
|
6
|
+
@isResizeble={{or this.isResizable @isResizable}}
|
|
7
|
+
@width={{or this.width @width "600px"}}
|
|
8
|
+
>
|
|
2
9
|
<Overlay::Header @hideLeftSection={{true}} @actionsWrapperClass="flex-1 flex-col py-3" class="h-auto-i min-h-[127px]">
|
|
3
10
|
<div class="flex flex-row items-center justify-between w-full mb-4">
|
|
4
11
|
<div class="flex flex-1 space-x-2">
|
|
@@ -17,13 +24,21 @@
|
|
|
17
24
|
<div class="flex flex-col flex-1 w-3/4">
|
|
18
25
|
<div class="flex flex-row">
|
|
19
26
|
<div class="w-14">
|
|
20
|
-
<div class="w-12 h-12 flex items-center justify-start
|
|
21
|
-
<img src={{this.contact.photo_url}} alt={{this.contact.name}} height="48" width="48" class="h-12 w-12 rounded-lg shadow-sm"
|
|
27
|
+
<div class="upload-avatar-overlay w-12 h-12 flex items-center justify-start rounded-lg">
|
|
28
|
+
<img src={{this.contact.photo_url}} alt={{this.contact.name}} height="48" width="48" class="h-12 w-12 rounded-lg shadow-sm" />
|
|
22
29
|
<Attach::Tooltip @class="clean" @animation="scale" @placement="top">
|
|
23
30
|
<InputInfo @text={{this.contact.public_id}} />
|
|
24
31
|
</Attach::Tooltip>
|
|
25
|
-
<div class="
|
|
26
|
-
<UploadButton
|
|
32
|
+
<div class="upload-avatar-button-wrapper rounded-lg">
|
|
33
|
+
<UploadButton
|
|
34
|
+
@name="photos"
|
|
35
|
+
@accept="image/*"
|
|
36
|
+
@onFileAdded={{this.onUploadNewPhoto}}
|
|
37
|
+
@icon="upload"
|
|
38
|
+
@hideButtonText={{true}}
|
|
39
|
+
@labelClass="upload-avatar-label-overlay"
|
|
40
|
+
class="w-12 btn-reset"
|
|
41
|
+
/>
|
|
27
42
|
</div>
|
|
28
43
|
</div>
|
|
29
44
|
</div>
|
|
@@ -72,7 +87,14 @@
|
|
|
72
87
|
</InputGroup>
|
|
73
88
|
<InputGroup @name="Type">
|
|
74
89
|
<div class="fleetbase-model-select fleetbase-power-select ember-model-select">
|
|
75
|
-
<PowerSelect
|
|
90
|
+
<PowerSelect
|
|
91
|
+
@options={{this.contactTypeOptions}}
|
|
92
|
+
@selected={{this.contact.type}}
|
|
93
|
+
@onChange={{fn (mut this.contact.type)}}
|
|
94
|
+
@placeholder="Select contact type"
|
|
95
|
+
@triggerClass="form-select form-input"
|
|
96
|
+
as |type|
|
|
97
|
+
>
|
|
76
98
|
{{smart-humanize type}}
|
|
77
99
|
</PowerSelect>
|
|
78
100
|
</div>
|
|
@@ -109,6 +109,16 @@
|
|
|
109
109
|
</PowerSelect>
|
|
110
110
|
</div>
|
|
111
111
|
</InputGroup>
|
|
112
|
+
<InputGroup @name="Coordinates" @wrapperClass="col-span-2">
|
|
113
|
+
<CoordinatesInput
|
|
114
|
+
@value={{this.driver.location}}
|
|
115
|
+
@onChange={{this.onCoordinatesChanged}}
|
|
116
|
+
@onGeocode={{this.onAutocomplete}}
|
|
117
|
+
@onUpdatedFromMap={{this.onCoordinatesChanged}}
|
|
118
|
+
@onInit={{this.setCoordinatesInput}}
|
|
119
|
+
@renderInPlace={{false}}
|
|
120
|
+
/>
|
|
121
|
+
</InputGroup>
|
|
112
122
|
</div>
|
|
113
123
|
</div>
|
|
114
124
|
</Overlay::Body>
|
|
@@ -2,6 +2,7 @@ import Component from '@glimmer/component';
|
|
|
2
2
|
import { tracked } from '@glimmer/tracking';
|
|
3
3
|
import { inject as service } from '@ember/service';
|
|
4
4
|
import { action } from '@ember/object';
|
|
5
|
+
import Point from '@fleetbase/fleetops-data/utils/geojson/point';
|
|
5
6
|
import contextComponentCallback from '../utils/context-component-callback';
|
|
6
7
|
import applyContextComponentArguments from '../utils/apply-context-component-arguments';
|
|
7
8
|
|
|
@@ -59,6 +60,12 @@ export default class DriverFormPanelComponent extends Component {
|
|
|
59
60
|
*/
|
|
60
61
|
@tracked isLoading = false;
|
|
61
62
|
|
|
63
|
+
/**
|
|
64
|
+
* The coordinates input component instance.
|
|
65
|
+
* @type {CoordinateInputComponent}
|
|
66
|
+
*/
|
|
67
|
+
@tracked coordinatesInputComponent;
|
|
68
|
+
|
|
62
69
|
/**
|
|
63
70
|
* Constructs the component and applies initial state.
|
|
64
71
|
*/
|
|
@@ -108,6 +115,7 @@ export default class DriverFormPanelComponent extends Component {
|
|
|
108
115
|
this.isLoading = false;
|
|
109
116
|
});
|
|
110
117
|
} catch (error) {
|
|
118
|
+
this.notifications.error(error.message);
|
|
111
119
|
this.loader.removeLoader('.next-content-overlay-panel-container ');
|
|
112
120
|
this.isLoading = false;
|
|
113
121
|
}
|
|
@@ -160,4 +168,47 @@ export default class DriverFormPanelComponent extends Component {
|
|
|
160
168
|
@action onPressCancel() {
|
|
161
169
|
return contextComponentCallback(this, 'onPressCancel', this.driver);
|
|
162
170
|
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Handles the selection from an autocomplete. Updates the place properties with the selected data.
|
|
174
|
+
* If a coordinates input component is present, updates its coordinates too.
|
|
175
|
+
*
|
|
176
|
+
* @action
|
|
177
|
+
* @param {Object} selected - The selected item from the autocomplete.
|
|
178
|
+
* @param {Object} selected.location - The location data of the selected item.
|
|
179
|
+
* @memberof DriverFormPanelComponent
|
|
180
|
+
*/
|
|
181
|
+
@action onAutocomplete({ location }) {
|
|
182
|
+
if (location) {
|
|
183
|
+
this.driver.set('location', location);
|
|
184
|
+
if (this.coordinatesInputComponent) {
|
|
185
|
+
this.coordinatesInputComponent.updateCoordinates(location);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Sets the coordinates input component.
|
|
192
|
+
*
|
|
193
|
+
* @action
|
|
194
|
+
* @param {Object} coordinatesInputComponent - The coordinates input component to be set.
|
|
195
|
+
* @memberof DriverFormPanelComponent
|
|
196
|
+
*/
|
|
197
|
+
@action setCoordinatesInput(coordinatesInputComponent) {
|
|
198
|
+
this.coordinatesInputComponent = coordinatesInputComponent;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Updates the place coordinates with the given latitude and longitude.
|
|
203
|
+
*
|
|
204
|
+
* @action
|
|
205
|
+
* @param {Object} coordinates - The latitude and longitude coordinates.
|
|
206
|
+
* @param {number} coordinates.latitude - Latitude value.
|
|
207
|
+
* @param {number} coordinates.longitude - Longitude value.
|
|
208
|
+
* @memberof DriverFormPanelComponent
|
|
209
|
+
*/
|
|
210
|
+
@action onCoordinatesChanged({ latitude, longitude }) {
|
|
211
|
+
const location = new Point(longitude, latitude);
|
|
212
|
+
this.driver.setProperties({ location });
|
|
213
|
+
}
|
|
163
214
|
}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
</div>
|
|
16
16
|
<div class="field-info-container">
|
|
17
17
|
<div class="field-name">Drivers License</div>
|
|
18
|
-
<div class="field-value">{{n-a @driver.
|
|
18
|
+
<div class="field-value">{{n-a @driver.drivers_license_number}}</div>
|
|
19
19
|
</div>
|
|
20
20
|
<div class="field-info-container">
|
|
21
21
|
<div class="field-name">Email</div>
|
|
@@ -25,10 +25,6 @@
|
|
|
25
25
|
<div class="field-name">Phone</div>
|
|
26
26
|
<div class="field-value">{{n-a @driver.phone}}</div>
|
|
27
27
|
</div>
|
|
28
|
-
<div class="field-info-container">
|
|
29
|
-
<div class="field-name">Current Job</div>
|
|
30
|
-
<div class="field-value">{{n-a @driver.current_job_id}}</div>
|
|
31
|
-
</div>
|
|
32
28
|
<div class="field-info-container">
|
|
33
29
|
<div class="field-name">City</div>
|
|
34
30
|
<div class="field-value">{{n-a @driver.city}}</div>
|
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
<Overlay
|
|
1
|
+
<Overlay
|
|
2
|
+
@onLoad={{this.setOverlayContext}}
|
|
3
|
+
@position="right"
|
|
4
|
+
@noBackdrop={{true}}
|
|
5
|
+
@fullHeight={{true}}
|
|
6
|
+
@isResizeble={{or this.isResizable @isResizable}}
|
|
7
|
+
@width={{or this.width @width "600px"}}
|
|
8
|
+
>
|
|
2
9
|
<Overlay::Header @hideLeftSection={{true}} @actionsWrapperClass="flex-1 flex-col py-3" class="h-auto-i min-h-[127px]">
|
|
3
10
|
<div class="flex flex-row items-center justify-between w-full mb-4">
|
|
4
11
|
<div class="flex flex-1 space-x-2">
|
|
@@ -14,7 +21,14 @@
|
|
|
14
21
|
<div class="flex flex-row">
|
|
15
22
|
<div class="w-14">
|
|
16
23
|
<div class="w-12 h-12 flex items-center justify-start rounded-lg">
|
|
17
|
-
<Image
|
|
24
|
+
<Image
|
|
25
|
+
src={{this.driver.photo_url}}
|
|
26
|
+
@fallbackSrc={{config "defaultValues.driverImage"}}
|
|
27
|
+
alt={{this.driver.name}}
|
|
28
|
+
height="48"
|
|
29
|
+
width="48"
|
|
30
|
+
class="h-12 w-12 rounded-lg shadow-sm"
|
|
31
|
+
/>
|
|
18
32
|
<Attach::Tooltip @class="clean" @animation="scale" @placement="top">
|
|
19
33
|
<InputInfo @text={{this.driver.name}} />
|
|
20
34
|
</Attach::Tooltip>
|
|
@@ -25,7 +39,11 @@
|
|
|
25
39
|
<div class="-mt-1">
|
|
26
40
|
{{#if this.driver.vehicle}}
|
|
27
41
|
<div class="flex flex-row items-center">
|
|
28
|
-
<a
|
|
42
|
+
<a
|
|
43
|
+
href="javascript:;"
|
|
44
|
+
class="text-sm dark:text-blue-400 text-blue-600 hover:opacity-50"
|
|
45
|
+
{{on "click" this.onClickDriverVehicle}}
|
|
46
|
+
>{{this.driver.vehicle.displayName}}</a>
|
|
29
47
|
</div>
|
|
30
48
|
{{else}}
|
|
31
49
|
<div class="flex flex-row items-center">
|
|
@@ -1,5 +1,18 @@
|
|
|
1
|
-
<Overlay
|
|
2
|
-
|
|
1
|
+
<Overlay
|
|
2
|
+
@onLoad={{this.setOverlayContext}}
|
|
3
|
+
@position="right"
|
|
4
|
+
@noBackdrop={{true}}
|
|
5
|
+
@fullHeight={{true}}
|
|
6
|
+
@isResizeble={{or this.isResizable @isResizable}}
|
|
7
|
+
@width={{or this.width @width "600px"}}
|
|
8
|
+
>
|
|
9
|
+
<Overlay::Header
|
|
10
|
+
@title={{if this.fleet.public_id this.fleet.name "New Fleet"}}
|
|
11
|
+
@status={{this.fleet.public_id}}
|
|
12
|
+
@hideStatusDot={{true}}
|
|
13
|
+
@createdAt={{this.fleet.createdAt}}
|
|
14
|
+
@titleWrapperClass="leading-5"
|
|
15
|
+
>
|
|
3
16
|
<div class="flex flex-1 justify-end">
|
|
4
17
|
<Button @icon={{if this.fleet.id "save" "check"}} @type="primary" @text={{if this.fleet.id "Save Fleet" "Create Fleet"}} @onClick={{this.save}} @wrapperClass="mr-2" />
|
|
5
18
|
{{#if this.fleet.id}}
|
|
@@ -14,23 +27,64 @@
|
|
|
14
27
|
<div class="flex flex-col text-xs dark:text-gray-100">
|
|
15
28
|
<InputGroup @name="Fleet Name" @value={{this.fleet.name}} />
|
|
16
29
|
<InputGroup @name="Parent Fleet" @value={{this.fleet.parent_fleet}}>
|
|
17
|
-
<ModelSelect
|
|
30
|
+
<ModelSelect
|
|
31
|
+
@modelName="fleet"
|
|
32
|
+
@selectedModel={{this.fleet.parent_fleet}}
|
|
33
|
+
@placeholder="Select parent fleet to assign fleet to"
|
|
34
|
+
@triggerClass="form-select form-input"
|
|
35
|
+
@infiniteScroll={{false}}
|
|
36
|
+
@renderInPlace={{true}}
|
|
37
|
+
@onChange={{fn this.updateRelationship "parent_fleet"}}
|
|
38
|
+
@allowClear={{true}}
|
|
39
|
+
as |model|
|
|
40
|
+
>
|
|
18
41
|
{{model.name}}
|
|
19
42
|
</ModelSelect>
|
|
20
43
|
</InputGroup>
|
|
21
44
|
<InputGroup @name="Vendor" @value={{this.fleet.vendor}}>
|
|
22
|
-
<ModelSelect
|
|
45
|
+
<ModelSelect
|
|
46
|
+
@modelName="vendor"
|
|
47
|
+
@selectedModel={{this.fleet.vendor}}
|
|
48
|
+
@placeholder="Select vendor to assign fleet to"
|
|
49
|
+
@triggerClass="form-select form-input"
|
|
50
|
+
@infiniteScroll={{false}}
|
|
51
|
+
@renderInPlace={{true}}
|
|
52
|
+
@onChange={{fn this.updateRelationship "vendor"}}
|
|
53
|
+
@allowClear={{true}}
|
|
54
|
+
as |model|
|
|
55
|
+
>
|
|
23
56
|
{{model.name}}
|
|
24
57
|
</ModelSelect>
|
|
25
58
|
</InputGroup>
|
|
26
59
|
<InputGroup @name="Assign to Service Area" @value={{this.fleet.service_area}}>
|
|
27
|
-
<ModelSelect
|
|
60
|
+
<ModelSelect
|
|
61
|
+
@modelName="service-area"
|
|
62
|
+
@selectedModel={{this.fleet.service_area}}
|
|
63
|
+
@placeholder="Select service area to assign fleet to"
|
|
64
|
+
@triggerClass="form-select form-input"
|
|
65
|
+
@infiniteScroll={{false}}
|
|
66
|
+
@renderInPlace={{true}}
|
|
67
|
+
@onChange={{fn this.updateRelationship "service_area"}}
|
|
68
|
+
@allowClear={{true}}
|
|
69
|
+
as |model|
|
|
70
|
+
>
|
|
28
71
|
{{model.name}}
|
|
29
72
|
</ModelSelect>
|
|
30
73
|
</InputGroup>
|
|
31
74
|
{{#if this.fleet.service_area}}
|
|
32
75
|
<InputGroup @name="Assign to Zone" @value={{this.fleet.zone}}>
|
|
33
|
-
<ModelSelect
|
|
76
|
+
<ModelSelect
|
|
77
|
+
@modelName="zone"
|
|
78
|
+
@selectedModel={{this.fleet.zone}}
|
|
79
|
+
@query={{hash service_area_uuid=this.fleet.service_area.id}}
|
|
80
|
+
@placeholder="Select zone to assign fleet to"
|
|
81
|
+
@triggerClass="form-select form-input"
|
|
82
|
+
@infiniteScroll={{false}}
|
|
83
|
+
@renderInPlace={{true}}
|
|
84
|
+
@onChange={{fn this.updateRelationship "zone"}}
|
|
85
|
+
@allowClear={{true}}
|
|
86
|
+
as |model|
|
|
87
|
+
>
|
|
34
88
|
{{model.name}}
|
|
35
89
|
</ModelSelect>
|
|
36
90
|
</InputGroup>
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
<Layout::Sidebar::Panel @open={{or @open true}} @title={{this.fleet.name}} @wrapperClass="next-fleet-summary-fleet fleet-depth-{{@depth}}">
|
|
1
|
+
<Layout::Sidebar::Panel @open={{or @open true}} @title={{this.fleet.name}} @titleStatusRightText={{concat this.fleet.vehicles_online_count "/" this.fleet.vehicles_count}} @titleStatusRight="info" @hideRightTitleStatusDot={{true}} @titleStatusRightContainerClass="-mr-2" @wrapperClass="next-fleet-summary-fleet fleet-depth-{{@depth}}">
|
|
2
2
|
{{#each this.fleet.subfleets as |subFleet|}}
|
|
3
3
|
<FleetListingPanel @fleet={{subFleet}} @onVehicleClicked={{this.onVehicleClicked}} @depth={{add @depth 1}} />
|
|
4
4
|
{{/each}}
|
|
5
5
|
{{#each this.fleet.vehicles as |vehicle|}}
|
|
6
|
-
<Layout::Sidebar::Item @icon="circle" @iconSize="2xs" @iconClass={{if vehicle.online "text-green-500" "text-yellow-200"}} @onClick={{fn this.onVehicleClicked vehicle}}>{{vehicle.displayName}}</Layout::Sidebar::Item>
|
|
6
|
+
<Layout::Sidebar::Item @icon="circle" @iconSize="2xs" @iconClass={{if vehicle.online "text-green-500" "text-yellow-200"}} @onClick={{fn this.onVehicleClicked vehicle}} @rightSideComponent={{@itemRightSideComponent}} @rightSideComponentContext={{@itemRightSideComponentContext}} @rightSideStatus={{@itemRightSideStatus}} @rightSideStatusText={{@itemRightSideStatusText}} @hideRightSideStatusDot={{@itemHideRightSideStatusDot}} @rightSideStatusClass={{@itemRightSideStatusClass}} @disableRightSideStatusHumanize={{@itemDisableRightSideStatusHumanize}} @dropdownButton={{@itemDropdownButton}} @dropdownButtonActions={{@itemDropdownButtonActions}} @dropdownButtonIcon={{@itemDropdownButtonIcon}} @dropdownButtonIconPrefix={{@itemDropdownButtonIconPrefix}} @dropdownButtonText={{@itemDropdownButtonText}} @dropdownButtonCalculatePosition={{@itemDropdownButtonCalculatePosition}} @dropdownButtonRenderInPlace={{@itemDropdownButtonRenderInPlace}} @dropdownButtonMenuLabel={{@itemDropdownButtonMenuLabel}} @dropdownButtonWrapperClass={{@itemDropdownButtonWrapperClass}} @dropdownButtonTriggerClass={{@itemDropdownButtonTriggerClass}} @registerDropdownButtonAPI={{@itemRegisterDropdownButtonAPI}}>{{vehicle.displayName}}</Layout::Sidebar::Item>
|
|
7
7
|
{{/each}}
|
|
8
8
|
</Layout::Sidebar::Panel>
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
</div>
|
|
8
8
|
<div class="field-info-container">
|
|
9
9
|
<div class="field-name">Service Area</div>
|
|
10
|
-
<div class="field-value">{{n-a @fleet.
|
|
10
|
+
<div class="field-value">{{n-a @fleet.service_area.name}}</div>
|
|
11
11
|
</div>
|
|
12
12
|
<div class="field-info-container">
|
|
13
13
|
<div class="field-name">Zone</div>
|
|
@@ -1,7 +1,26 @@
|
|
|
1
|
-
<Overlay
|
|
2
|
-
|
|
1
|
+
<Overlay
|
|
2
|
+
@onLoad={{this.setOverlayContext}}
|
|
3
|
+
@position="right"
|
|
4
|
+
@noBackdrop={{true}}
|
|
5
|
+
@fullHeight={{true}}
|
|
6
|
+
@isResizeble={{or this.isResizable @isResizable}}
|
|
7
|
+
@width={{or this.width @width "600px"}}
|
|
8
|
+
>
|
|
9
|
+
<Overlay::Header
|
|
10
|
+
@title={{if this.fuelReport.public_id this.fuelReport.name "New Fuel Report"}}
|
|
11
|
+
@status={{this.fuelReport.public_id}}
|
|
12
|
+
@hideStatusDot={{true}}
|
|
13
|
+
@createdAt={{this.fuelReport.createdAt}}
|
|
14
|
+
@titleWrapperClass="leading-5"
|
|
15
|
+
>
|
|
3
16
|
<div class="flex flex-1 justify-end">
|
|
4
|
-
<Button
|
|
17
|
+
<Button
|
|
18
|
+
@icon={{if this.fuelReport.id "save" "check"}}
|
|
19
|
+
@type="primary"
|
|
20
|
+
@text={{if this.fuelReport.id "Save Fuel Report" "Create Fuel Report"}}
|
|
21
|
+
@onClick={{this.save}}
|
|
22
|
+
@wrapperClass="mr-2"
|
|
23
|
+
/>
|
|
5
24
|
{{#if this.fuelReport.id}}
|
|
6
25
|
<Button @type="default" @icon="gas-pump" @helpText="View fuel report details" @onClick={{this.onViewDetails}} @wrapperClass="mr-2" />
|
|
7
26
|
{{/if}}
|
|
@@ -12,26 +31,83 @@
|
|
|
12
31
|
<Overlay::Body @wrapperClass="new-service-rate-overlay-body px-4 space-y-4 pt-4" @increaseInnerBodyHeightBy={{1000}}>
|
|
13
32
|
<div class="grid grid-cols-1 text-xs dark:text-gray-100">
|
|
14
33
|
<InputGroup @name="Reporter">
|
|
15
|
-
<ModelSelect
|
|
34
|
+
<ModelSelect
|
|
35
|
+
@modelName="user"
|
|
36
|
+
@selectedModel={{this.fuelReport.reporter}}
|
|
37
|
+
@placeholder="Select Reporter"
|
|
38
|
+
@triggerClass="form-select form-input"
|
|
39
|
+
@infiniteScroll={{false}}
|
|
40
|
+
@renderInPlace={{true}}
|
|
41
|
+
@onChange={{fn (mut this.fuelReport.reporter)}}
|
|
42
|
+
@onChangeId={{fn (mut this.fuelReport.reported_by_uuid)}}
|
|
43
|
+
as |model|
|
|
44
|
+
>
|
|
16
45
|
{{model.name}}
|
|
17
46
|
</ModelSelect>
|
|
18
47
|
</InputGroup>
|
|
19
48
|
<InputGroup @name="Driver">
|
|
20
|
-
<ModelSelect
|
|
49
|
+
<ModelSelect
|
|
50
|
+
@modelName="driver"
|
|
51
|
+
@selectedModel={{this.fuelReport.driver}}
|
|
52
|
+
@placeholder="Select Driver"
|
|
53
|
+
@triggerClass="form-select form-input"
|
|
54
|
+
@infiniteScroll={{false}}
|
|
55
|
+
@renderInPlace={{true}}
|
|
56
|
+
@onChange={{fn (mut this.fuelReport.driver)}}
|
|
57
|
+
@onChangeId={{fn (mut this.fuelReport.driver_uuid)}}
|
|
58
|
+
as |model|
|
|
59
|
+
>
|
|
21
60
|
{{model.name}}
|
|
22
61
|
</ModelSelect>
|
|
23
62
|
</InputGroup>
|
|
24
63
|
<InputGroup @name="Vehicle">
|
|
25
|
-
<ModelSelect
|
|
64
|
+
<ModelSelect
|
|
65
|
+
@modelName="vehicle"
|
|
66
|
+
@selectedModel={{this.fuelReport.vehicle}}
|
|
67
|
+
@placeholder="Select Vehicle"
|
|
68
|
+
@triggerClass="form-select form-input"
|
|
69
|
+
@infiniteScroll={{false}}
|
|
70
|
+
@renderInPlace={{true}}
|
|
71
|
+
@onChange={{fn (mut this.fuelReport.vehicle)}}
|
|
72
|
+
@onChangeId={{fn (mut this.fuelReport.vehicle_uuid)}}
|
|
73
|
+
as |model|
|
|
74
|
+
>
|
|
26
75
|
{{model.display_name}}
|
|
27
76
|
</ModelSelect>
|
|
28
77
|
</InputGroup>
|
|
78
|
+
<InputGroup @name="Status">
|
|
79
|
+
<div class="fleetbase-model-select fleetbase-power-select ember-model-select">
|
|
80
|
+
<PowerSelect
|
|
81
|
+
@options={{this.statusOptions}}
|
|
82
|
+
@selected={{this.fuelReport.status}}
|
|
83
|
+
@onChange={{fn (mut this.fuelReport.status)}}
|
|
84
|
+
@placeholder="Select fuel-report status"
|
|
85
|
+
@triggerClass="form-select form-input"
|
|
86
|
+
as |status|
|
|
87
|
+
>
|
|
88
|
+
{{smart-humanize status}}
|
|
89
|
+
</PowerSelect>
|
|
90
|
+
</div>
|
|
91
|
+
</InputGroup>
|
|
29
92
|
<InputGroup @name="Odometer" @type="number" @value={{this.fuelReport.odometer}} />
|
|
30
93
|
<InputGroup @name="Cost">
|
|
31
|
-
<MoneyInput
|
|
94
|
+
<MoneyInput
|
|
95
|
+
class="w-full"
|
|
96
|
+
@value={{this.fuelReport.amount}}
|
|
97
|
+
@currency={{this.fuelReport.currency}}
|
|
98
|
+
@canSelectCurrency={{true}}
|
|
99
|
+
@onCurrencyChange={{fn (mut this.fuelReport.currency)}}
|
|
100
|
+
/>
|
|
32
101
|
</InputGroup>
|
|
33
102
|
<InputGroup @name="Volume" @helpText="Select the metric unit and volume of fuel to report." @wrapperClass="w-full">
|
|
34
|
-
<UnitInput
|
|
103
|
+
<UnitInput
|
|
104
|
+
class="w-full"
|
|
105
|
+
@measurement="volume"
|
|
106
|
+
@value={{this.fuelReport.volume}}
|
|
107
|
+
@unit={{this.fuelReport.metric_unit}}
|
|
108
|
+
@canSelectUnit={{true}}
|
|
109
|
+
@onUnitChange={{fn (mut this.fuelReport.metric_unit)}}
|
|
110
|
+
/>
|
|
35
111
|
</InputGroup>
|
|
36
112
|
<InputGroup @name="Coordinates">
|
|
37
113
|
<CoordinatesInput @value={{this.fuelReport.location}} @onChange={{fn (mut this.fuelReport.location)}} />
|
|
@@ -43,6 +43,12 @@ export default class FuelReportFormPanelComponent extends Component {
|
|
|
43
43
|
*/
|
|
44
44
|
@tracked isLoading = false;
|
|
45
45
|
|
|
46
|
+
/**
|
|
47
|
+
* Fuel Report status
|
|
48
|
+
* @type {Array}
|
|
49
|
+
*/
|
|
50
|
+
@tracked statusOptions = ['draft', 'pending-approval', 'approved', 'rejected', 'revised', 'submitted', 'in-review', 'confirmed', 'processed', 'archived', 'cancelled'];
|
|
51
|
+
|
|
46
52
|
/**
|
|
47
53
|
* Constructs the component and applies initial state.
|
|
48
54
|
*/
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
<div class="p-4">
|
|
2
2
|
<ContentPanel @title="Details" @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-900">
|
|
3
3
|
<div class="grid grid-cols-2 gap-2 text-xs md:mb-6 dark:text-gray-100">
|
|
4
|
+
<div class="field-info-container">
|
|
5
|
+
<div class="field-name">ID</div>
|
|
6
|
+
<div class="field-value">{{n-a @fuelReport.public_id}}</div>
|
|
7
|
+
</div>
|
|
4
8
|
<div class="field-info-container col-span-2">
|
|
5
9
|
<div class="field-name">Reporter</div>
|
|
6
10
|
<div class="field-value">{{n-a @fuelReport.reporter_name}}</div>
|
|
@@ -1,5 +1,18 @@
|
|
|
1
|
-
<Overlay
|
|
2
|
-
|
|
1
|
+
<Overlay
|
|
2
|
+
@onLoad={{this.setOverlayContext}}
|
|
3
|
+
@position="right"
|
|
4
|
+
@noBackdrop={{true}}
|
|
5
|
+
@fullHeight={{true}}
|
|
6
|
+
@isResizable={{or this.isResizable @isResizable}}
|
|
7
|
+
@width={{or this.width @width "600px"}}
|
|
8
|
+
>
|
|
9
|
+
<Overlay::Header
|
|
10
|
+
@title={{if this.issue.public_id this.issue.name "New Issue"}}
|
|
11
|
+
@status={{this.issue.public_id}}
|
|
12
|
+
@hideStatusDot={{true}}
|
|
13
|
+
@createdAt={{this.issue.createdAt}}
|
|
14
|
+
@titleWrapperClass="leading-5"
|
|
15
|
+
>
|
|
3
16
|
<div class="flex flex-1 justify-end">
|
|
4
17
|
<Button @icon={{if this.issue.id "save" "check"}} @type="primary" @text={{if this.issue.id "Save Issue" "Create Issue"}} @onClick={{this.save}} @wrapperClass="mr-2" />
|
|
5
18
|
{{#if this.issue.id}}
|
|
@@ -12,32 +25,77 @@
|
|
|
12
25
|
<Overlay::Body @wrapperClass="new-service-rate-overlay-body px-4 pt-4" @increaseInnerBodyHeightBy={{1000}}>
|
|
13
26
|
<div class="grid grid-cols-1 text-xs dark:text-gray-100">
|
|
14
27
|
<InputGroup @name="Reported By">
|
|
15
|
-
<ModelSelect
|
|
28
|
+
<ModelSelect
|
|
29
|
+
@modelName="user"
|
|
30
|
+
@selectedModel={{this.issue.reporter}}
|
|
31
|
+
@placeholder="Select Reporter"
|
|
32
|
+
@triggerClass="form-select form-input"
|
|
33
|
+
@infiniteScroll={{false}}
|
|
34
|
+
@renderInPlace={{true}}
|
|
35
|
+
@onChange={{fn (mut this.issue.reporter)}}
|
|
36
|
+
@onChangeId={{fn (mut this.issue.reported_by_uuid)}}
|
|
37
|
+
as |model|
|
|
38
|
+
>
|
|
16
39
|
{{model.name}}
|
|
17
40
|
</ModelSelect>
|
|
18
41
|
</InputGroup>
|
|
19
42
|
|
|
20
43
|
<InputGroup @name="Assigned To">
|
|
21
|
-
<ModelSelect
|
|
44
|
+
<ModelSelect
|
|
45
|
+
@modelName="user"
|
|
46
|
+
@selectedModel={{this.issue.assignee}}
|
|
47
|
+
@placeholder="Select Assignee"
|
|
48
|
+
@triggerClass="form-select form-input"
|
|
49
|
+
@infiniteScroll={{false}}
|
|
50
|
+
@renderInPlace={{true}}
|
|
51
|
+
@onChange={{fn (mut this.issue.assignee)}}
|
|
52
|
+
@onChangeId={{fn (mut this.issue.assigned_to_uuid)}}
|
|
53
|
+
as |model|
|
|
54
|
+
>
|
|
22
55
|
{{model.name}}
|
|
23
56
|
</ModelSelect>
|
|
24
57
|
</InputGroup>
|
|
25
58
|
|
|
26
59
|
<InputGroup @name="Driver">
|
|
27
|
-
<ModelSelect
|
|
60
|
+
<ModelSelect
|
|
61
|
+
@modelName="driver"
|
|
62
|
+
@selectedModel={{this.issue.driver}}
|
|
63
|
+
@placeholder="Select Driver"
|
|
64
|
+
@triggerClass="form-select form-input"
|
|
65
|
+
@infiniteScroll={{false}}
|
|
66
|
+
@renderInPlace={{true}}
|
|
67
|
+
@onChange={{fn (mut this.issue.driver)}}
|
|
68
|
+
as |model|
|
|
69
|
+
>
|
|
28
70
|
{{model.name}}
|
|
29
71
|
</ModelSelect>
|
|
30
72
|
</InputGroup>
|
|
31
73
|
|
|
32
74
|
<InputGroup @name="Vehicle">
|
|
33
|
-
<ModelSelect
|
|
75
|
+
<ModelSelect
|
|
76
|
+
@modelName="vehicle"
|
|
77
|
+
@selectedModel={{this.issue.vehicle}}
|
|
78
|
+
@placeholder="Select Vehicle"
|
|
79
|
+
@triggerClass="form-select form-input"
|
|
80
|
+
@infiniteScroll={{false}}
|
|
81
|
+
@renderInPlace={{true}}
|
|
82
|
+
@onChange={{fn (mut this.issue.vehicle)}}
|
|
83
|
+
as |model|
|
|
84
|
+
>
|
|
34
85
|
{{model.displayName}}
|
|
35
86
|
</ModelSelect>
|
|
36
87
|
</InputGroup>
|
|
37
88
|
|
|
38
89
|
<InputGroup @name="Issue Type">
|
|
39
90
|
<div class="fleetbase-model-select fleetbase-power-select ember-model-select">
|
|
40
|
-
<PowerSelect
|
|
91
|
+
<PowerSelect
|
|
92
|
+
@options={{this.issueTypes}}
|
|
93
|
+
@selected={{this.issue.type}}
|
|
94
|
+
@onChange={{this.onSelectIssueType}}
|
|
95
|
+
@placeholder="Select issue type"
|
|
96
|
+
@triggerClass="form-select form-input"
|
|
97
|
+
as |type|
|
|
98
|
+
>
|
|
41
99
|
{{smart-humanize type}}
|
|
42
100
|
</PowerSelect>
|
|
43
101
|
</div>
|
|
@@ -45,7 +103,15 @@
|
|
|
45
103
|
|
|
46
104
|
<InputGroup @name="Issue Category">
|
|
47
105
|
<div class="fleetbase-model-select fleetbase-power-select ember-model-select">
|
|
48
|
-
<PowerSelect
|
|
106
|
+
<PowerSelect
|
|
107
|
+
@options={{this.issueCategories}}
|
|
108
|
+
@selected={{this.issue.category}}
|
|
109
|
+
@onChange={{fn (mut this.issue.category)}}
|
|
110
|
+
@placeholder="Select issue category"
|
|
111
|
+
@triggerClass="form-select form-input"
|
|
112
|
+
@disabled={{not this.issueCategories}}
|
|
113
|
+
as |category|
|
|
114
|
+
>
|
|
49
115
|
{{smart-humanize category}}
|
|
50
116
|
</PowerSelect>
|
|
51
117
|
</div>
|
|
@@ -56,14 +122,29 @@
|
|
|
56
122
|
</InputGroup>
|
|
57
123
|
|
|
58
124
|
<InputGroup @name="Issue Tags">
|
|
59
|
-
<TagInput
|
|
125
|
+
<TagInput
|
|
126
|
+
class="form-input"
|
|
127
|
+
@placeholder="Add tags"
|
|
128
|
+
@allowSpacesInTags={{true}}
|
|
129
|
+
@tags={{this.issue.tags}}
|
|
130
|
+
@addTag={{this.addTag}}
|
|
131
|
+
@removeTagAtIndex={{this.removeTag}}
|
|
132
|
+
as |tag|
|
|
133
|
+
>
|
|
60
134
|
{{tag}}
|
|
61
135
|
</TagInput>
|
|
62
136
|
</InputGroup>
|
|
63
137
|
|
|
64
138
|
<InputGroup @name="Issue Priority">
|
|
65
139
|
<div class="fleetbase-model-select fleetbase-power-select ember-model-select">
|
|
66
|
-
<PowerSelect
|
|
140
|
+
<PowerSelect
|
|
141
|
+
@options={{this.issuePriorityOptions}}
|
|
142
|
+
@selected={{this.issue.priority}}
|
|
143
|
+
@onChange={{fn (mut this.issue.priority)}}
|
|
144
|
+
@placeholder="Select issue priority"
|
|
145
|
+
@triggerClass="form-select form-input"
|
|
146
|
+
as |priority|
|
|
147
|
+
>
|
|
67
148
|
{{smart-humanize priority}}
|
|
68
149
|
</PowerSelect>
|
|
69
150
|
</div>
|
|
@@ -71,7 +152,14 @@
|
|
|
71
152
|
|
|
72
153
|
<InputGroup @name="Status">
|
|
73
154
|
<div class="fleetbase-model-select fleetbase-power-select ember-model-select">
|
|
74
|
-
<PowerSelect
|
|
155
|
+
<PowerSelect
|
|
156
|
+
@options={{this.issueStatusOptions}}
|
|
157
|
+
@selected={{this.issue.status}}
|
|
158
|
+
@onChange={{fn (mut this.issue.status)}}
|
|
159
|
+
@placeholder="Select issue status"
|
|
160
|
+
@triggerClass="form-select form-input"
|
|
161
|
+
as |status|
|
|
162
|
+
>
|
|
75
163
|
{{smart-humanize status}}
|
|
76
164
|
</PowerSelect>
|
|
77
165
|
</div>
|