Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
169 changes: 169 additions & 0 deletions EVENTS_TRACKING_SUMMARY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
# FleetOps Event Tracking Implementation Summary

## Overview
Added event tracking to FleetOps controllers using the `events` service from `@fleetbase/ember-core`.

## Controllers Updated

### Total: 30 controllers with active save tasks

#### Analytics (2)
- ✅ `analytics/reports/index/new.js` - Track report created
- ✅ `analytics/reports/index/edit.js` - Track report updated

#### Connectivity (6)
- ✅ `connectivity/devices/index/new.js` - Track device created
- ✅ `connectivity/devices/index/edit.js` - Track device updated
- ✅ `connectivity/sensors/index/new.js` - Track sensor created
- ✅ `connectivity/sensors/index/edit.js` - Track sensor updated
- ✅ `connectivity/telematics/index/new.js` - Track telematics created
- ✅ `connectivity/telematics/index/edit.js` - Track telematics updated

#### Management (16)
- ✅ `management/contacts/customers/new.js` - Track customer created
- ✅ `management/contacts/customers/edit.js` - Track customer updated
- ✅ `management/contacts/index/new.js` - Track contact created
- ✅ `management/contacts/index/edit.js` - Track contact updated
- ✅ `management/drivers/index/new.js` - Track driver created
- ✅ `management/drivers/index/edit.js` - Track driver updated
- ✅ `management/fleets/index/new.js` - Track fleet created
- ✅ `management/fleets/index/edit.js` - Track fleet updated
- ✅ `management/fuel-reports/index/new.js` - Track fuel report created
- ✅ `management/fuel-reports/index/edit.js` - Track fuel report updated
- ✅ `management/issues/index/new.js` - Track issue created
- ✅ `management/issues/index/edit.js` - Track issue updated
- ✅ `management/places/index/new.js` - Track place created
- ✅ `management/places/index/edit.js` - Track place updated
- ✅ `management/vehicles/index/new.js` - Track vehicle created
- ✅ `management/vehicles/index/edit.js` - Track vehicle updated
- ✅ `management/vendors/index/new.js` - Track vendor created
- ✅ `management/vendors/index/edit.js` - Track vendor updated

#### Operations (4)
- ✅ `operations/orders/index/new.js` - Track order created
- ✅ `operations/service-rates/index/new.js` - Track service rate created
- ✅ `operations/service-rates/index/edit.js` - Track service rate updated

## Components Updated

### Total: 1 component

- ✅ `customer/create-order-form.js` - Added standard event tracking alongside existing custom events

## Controllers Skipped (Empty/No Save Task)

### Maintenance (6)
- ⏭️ `maintenance/equipment/index/new.js` - Empty controller
- ⏭️ `maintenance/equipment/index/edit.js` - Empty controller
- ⏭️ `maintenance/parts/index/new.js` - Empty controller
- ⏭️ `maintenance/parts/index/edit.js` - Empty controller
- ⏭️ `maintenance/work-orders/index/new.js` - Empty controller
- ⏭️ `maintenance/work-orders/index/edit.js` - Empty controller

### Management (2)
- ⏭️ `management/vendors/integrated/new.js` - Empty controller
- ⏭️ `management/vendors/integrated/edit.js` - Empty controller

### Operations (1)
- ⏭️ `operations/routes/index/new.js` - No save task

## Implementation Pattern

### NEW Controllers (Create)
```javascript
@service events;

@task *save(resource) {
try {
yield resource.save();
this.events.trackResourceCreated(resource);
// ... rest of code
} catch (err) {
this.notifications.serverError(err);
}
}
```

### EDIT Controllers (Update)
```javascript
@service events;

@task *save(resource) {
try {
yield resource.save();
this.events.trackResourceUpdated(resource);
// ... rest of code
} catch (err) {
this.notifications.serverError(err);
}
}
```

### Component (Dual Tracking)
```javascript
@service events;

yield order.save();

// Standard event tracking
this.events.trackResourceCreated(order);

// Keep existing custom event
this.universe.trigger('fleet-ops.order.created', order);
```

## Events Emitted

For each tracked resource, two events are emitted:

1. **Generic event**: `resource.created` or `resource.updated`
2. **Specific event**: `{model}.created` or `{model}.updated`

### Examples
- `resource.created` + `order.created`
- `resource.updated` + `vehicle.updated`
- `resource.created` + `driver.created`
- `resource.updated` + `place.updated`

## Resource Types Tracked

- `report` (analytics)
- `device`, `sensor`, `telematic` (connectivity)
- `customer`, `contact`, `driver`, `fleet`, `fuel-report`, `issue`, `place`, `vehicle`, `vendor` (management)
- `order`, `service-rate` (operations)

## Integration with Internals

These events will be consumed by the `internals` analytics-listener for PostHog tracking:

```javascript
// In internals/addon/instance-initializers/analytics-listener.js
universe.on('order.created', (order) => {
posthog.trackEvent('order_created', {
order_id: order.id,
// ... other properties
});
});
```

## Testing

To verify events are firing:

1. **In development console:**
```javascript
// Listen to all events
window.universe = owner.lookup('service:universe');
universe.on('resource.created', (resource) => console.log('Created:', resource));
universe.on('resource.updated', (resource) => console.log('Updated:', resource));
```

2. **Check PostHog (in cloud):**
- Events should appear in PostHog Activity tab
- Event names will be snake_case: `order_created`, `vehicle_updated`, etc.

## Dependencies

Requires:
- `@fleetbase/ember-core` with `events` service
- `@fleetbase/internals` with analytics-listener (for PostHog tracking in cloud)
5 changes: 5 additions & 0 deletions addon/components/customer/create-order-form.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ export default class CustomerCreateOrderFormComponent extends Component {
@service fetch;
@service intl;
@service universe;
@service events;
@tracked order;
@tracked customer;
@tracked payload = this.store.createRecord('payload');
Expand Down Expand Up @@ -194,6 +195,10 @@ export default class CustomerCreateOrderFormComponent extends Component {

try {
yield order.save();

// Track with standard events service
this.events.trackResourceCreated(order);

// trigger event that fleet-ops created an order
this.universe.trigger('fleet-ops.order.created', order);

Expand Down
2 changes: 2 additions & 0 deletions addon/controllers/analytics/reports/index/edit.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export default class AnalyticsReportsIndexEditController extends Controller {
@service intl;
@service notifications;
@service modalsManager;
@service events;
@tracked overlay;
@tracked actionButtons = [
{
Expand All @@ -26,6 +27,7 @@ export default class AnalyticsReportsIndexEditController extends Controller {
report.fillResult(result);

yield report.save();
this.events.trackResourceUpdated(report);
this.overlay?.close();

yield this.hostRouter.transitionTo('console.fleet-ops.analytics.reports.index.details', report);
Expand Down
2 changes: 2 additions & 0 deletions addon/controllers/analytics/reports/index/new.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export default class AnalyticsReportsIndexNewController extends Controller {
@service hostRouter;
@service intl;
@service notifications;
@service events;
@tracked overlay;
@tracked validationErrors = [];
@tracked report = this.reportActions.createNewInstance({ type: 'fleet-ops' });
Expand All @@ -22,6 +23,7 @@ export default class AnalyticsReportsIndexNewController extends Controller {
report.fillResult(result);

yield report.save();
this.events.trackResourceCreated(report);
this.overlay?.close();

yield this.hostRouter.refresh();
Expand Down
2 changes: 2 additions & 0 deletions addon/controllers/connectivity/devices/index/edit.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export default class ConnectivityDevicesIndexEditController extends Controller {
@service intl;
@service notifications;
@service modalsManager;
@service events;
@tracked overlay;

get actionButtons() {
Expand All @@ -23,6 +24,7 @@ export default class ConnectivityDevicesIndexEditController extends Controller {
@task *save(device) {
try {
yield device.save();
this.events.trackResourceUpdated(device);
this.overlay?.close();

yield this.hostRouter.transitionTo('console.fleet-ops.connectivity.devices.index.details', device);
Expand Down
2 changes: 2 additions & 0 deletions addon/controllers/connectivity/devices/index/new.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@ export default class ConnectivityDevicesIndexNewController extends Controller {
@service hostRouter;
@service intl;
@service notifications;
@service events;
@tracked overlay;
@tracked device = this.deviceActions.createNewInstance();

@task *save(device) {
try {
yield device.save();
this.events.trackResourceCreated(device);
this.overlay?.close();

yield this.hostRouter.refresh();
Expand Down
2 changes: 2 additions & 0 deletions addon/controllers/connectivity/sensors/index/edit.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export default class ConnectivitySensorsIndexEditController extends Controller {
@service intl;
@service notifications;
@service modalsManager;
@service events;
@tracked overlay;

get actionButtons() {
Expand All @@ -23,6 +24,7 @@ export default class ConnectivitySensorsIndexEditController extends Controller {
@task *save(sensor) {
try {
yield sensor.save();
this.events.trackResourceUpdated(sensor);
this.overlay?.close();

yield this.hostRouter.transitionTo('console.fleet-ops.connectivity.sensors.index.details', sensor);
Expand Down
2 changes: 2 additions & 0 deletions addon/controllers/connectivity/sensors/index/new.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@ export default class ConnectivitySensorsIndexNewController extends Controller {
@service hostRouter;
@service intl;
@service notifications;
@service events;
@tracked overlay;
@tracked sensor = this.sensorActions.createNewInstance();

@task *save(sensor) {
try {
yield sensor.save();
this.events.trackResourceCreated(sensor);
this.overlay?.close();

yield this.hostRouter.refresh();
Expand Down
2 changes: 2 additions & 0 deletions addon/controllers/connectivity/telematics/index/edit.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export default class ConnectivityTelematicsIndexEditController extends Controlle
@service intl;
@service notifications;
@service modalsManager;
@service events;
@tracked overlay;

get actionButtons() {
Expand All @@ -23,6 +24,7 @@ export default class ConnectivityTelematicsIndexEditController extends Controlle
@task *save(telematic) {
try {
yield telematic.save();
this.events.trackResourceUpdated(telematic);
this.overlay?.close();

yield this.hostRouter.transitionTo('console.fleet-ops.connectivity.telematics.index.details', telematic);
Expand Down
2 changes: 2 additions & 0 deletions addon/controllers/connectivity/telematics/index/new.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@ export default class ConnectivityTelematicsIndexNewController extends Controller
@service hostRouter;
@service intl;
@service notifications;
@service events;
@tracked overlay;
@tracked telematic = this.telematicActions.createNewInstance();

@task *save(telematic) {
try {
yield telematic.save();
this.events.trackResourceCreated(telematic);
this.overlay?.close();

yield this.hostRouter.refresh();
Expand Down
2 changes: 2 additions & 0 deletions addon/controllers/management/contacts/customers/edit.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export default class ManagementContactsCustomersEditController extends Controlle
@service intl;
@service notifications;
@service modalsManager;
@service events;
@tracked overlay;
@tracked actionButtons = [
{
Expand All @@ -20,6 +21,7 @@ export default class ManagementContactsCustomersEditController extends Controlle
@task *save(customer) {
try {
yield customer.save();
this.events.trackResourceUpdated(customer);
this.overlay?.close();

yield this.hostRouter.transitionTo('console.fleet-ops.management.contacts.customers.details', customer);
Expand Down
2 changes: 2 additions & 0 deletions addon/controllers/management/contacts/customers/new.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@ export default class ManagementContactsCustomersNewController extends Controller
@service hostRouter;
@service intl;
@service notifications;
@service events;
@tracked overlay;
@tracked customer = this.customerActions.createNewInstance();

@task *save(customer) {
try {
yield customer.save();
this.events.trackResourceCreated(customer);
this.overlay?.close();

yield this.hostRouter.refresh();
Expand Down
2 changes: 2 additions & 0 deletions addon/controllers/management/contacts/index/edit.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export default class ManagementContactsIndexEditController extends Controller {
@service intl;
@service notifications;
@service modalsManager;
@service events;
@tracked overlay;
@tracked actionButtons = [
{
Expand All @@ -20,6 +21,7 @@ export default class ManagementContactsIndexEditController extends Controller {
@task *save(contact) {
try {
yield contact.save();
this.events.trackResourceUpdated(contact);
this.overlay?.close();

yield this.hostRouter.transitionTo('console.fleet-ops.management.contacts.index.details', contact);
Expand Down
2 changes: 2 additions & 0 deletions addon/controllers/management/contacts/index/new.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@ export default class ManagementContactsIndexNewController extends Controller {
@service hostRouter;
@service intl;
@service notifications;
@service events;
@tracked overlay;
@tracked contact = this.contactActions.createNewInstance();

@task *save(contact) {
try {
yield contact.save();
this.events.trackResourceCreated(contact);
this.overlay?.close();

yield this.hostRouter.refresh();
Expand Down
2 changes: 2 additions & 0 deletions addon/controllers/management/drivers/index/edit.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export default class ManagementDriversIndexEditController extends Controller {
@service intl;
@service notifications;
@service modalsManager;
@service events;
@tracked overlay;
@tracked actionButtons = [
{
Expand All @@ -20,6 +21,7 @@ export default class ManagementDriversIndexEditController extends Controller {
@task *save(driver) {
try {
yield driver.save();
this.events.trackResourceUpdated(driver);
this.overlay?.close();

yield this.hostRouter.transitionTo('console.fleet-ops.management.drivers.index.details', driver);
Expand Down
Loading
Loading