Skip to content

Commit f97c6b3

Browse files
authored
Prepend app names to event trackers (#449)
1 parent cd25584 commit f97c6b3

File tree

54 files changed

+195
-126
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+195
-126
lines changed

src/app/core/models/enum/enum.model.ts

+13
Original file line numberDiff line numberDiff line change
@@ -610,3 +610,16 @@ export enum InputType {
610610
TOGGLE = 'TOGGLE',
611611
MULTI_SELECT = 'MULTI_SELECT',
612612
}
613+
614+
export enum TrackingApp {
615+
QBO = 'QBO',
616+
NETSUITE = 'NS',
617+
XERO = 'XERO',
618+
INTACCT = 'SI',
619+
SAGE300 = 'SAGE300',
620+
BUSINESS_CENTRAL = 'BC',
621+
QBD = 'QBD',
622+
BAMBOO_HR = 'BHR',
623+
TRAVELPERK = 'TP',
624+
GUSTO = 'GUSTO'
625+
}

src/app/core/models/misc/tracking.model.ts

+24-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { BusinessCentralAdvancedSettingsGet } from "../business-central/business-central-configuration/business-central-advanced-settings.model";
22
import { BusinessCentralExportSettingGet } from "../business-central/business-central-configuration/business-central-export-setting.model";
33
import { BusinessCentralImportSettingsGet } from "../business-central/business-central-configuration/business-central-import-settings.model";
4-
import { AccountingErrorType, IntacctErrorType, ProgressPhase } from "../enum/enum.model";
4+
import { AccountingErrorType, AppName, IntacctErrorType, ProgressPhase, TrackingApp } from "../enum/enum.model";
55
import { QBDAdvancedSettingsGet } from "../qbd/qbd-configuration/advanced-setting.model";
66
import { QBDExportSettingGet } from "../qbd/qbd-configuration/export-setting.model";
77
import { QBDFieldMappingGet } from "../qbd/qbd-configuration/field-mapping.model";
@@ -39,4 +39,26 @@ export type ResolveMappingErrorProperty = {
3939
endTime: Date,
4040
durationInSeconds: number,
4141
errorType: IntacctErrorType | AccountingErrorType
42-
};
42+
};
43+
44+
export type TrackingAppMap = {
45+
[AppName.BUSINESS_CENTRAL]: TrackingApp.BUSINESS_CENTRAL,
46+
[AppName.SAGE300]: TrackingApp.SAGE300,
47+
[AppName.QBD]: TrackingApp.QBD,
48+
[AppName.BAMBOO_HR]: TrackingApp.BAMBOO_HR,
49+
[AppName.INTACCT]: TrackingApp.INTACCT,
50+
[AppName.QBO]: TrackingApp.QBO,
51+
[AppName.TRAVELPERK]: TrackingApp.TRAVELPERK,
52+
[AppName.GUSTO]: TrackingApp.GUSTO,
53+
}
54+
55+
export const trackingAppMap: TrackingAppMap = {
56+
[AppName.BUSINESS_CENTRAL]: TrackingApp.BUSINESS_CENTRAL,
57+
[AppName.SAGE300]: TrackingApp.SAGE300,
58+
[AppName.QBD]: TrackingApp.QBD,
59+
[AppName.BAMBOO_HR]: TrackingApp.BAMBOO_HR,
60+
[AppName.INTACCT]: TrackingApp.INTACCT,
61+
[AppName.QBO]: TrackingApp.QBO,
62+
[AppName.TRAVELPERK]: TrackingApp.TRAVELPERK,
63+
[AppName.GUSTO]: TrackingApp.GUSTO
64+
};

src/app/core/services/integration/tracking.service.ts

+20-24
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Injectable } from '@angular/core';
2-
import { BusinessCentralOnboardingState, BusinessCentralUpdateEvent, ClickEvent, IntacctOnboardingState, IntacctUpdateEvent, Page, QBDOnboardingState, Sage300OnboardingState, Sage300UpdateEvent, UpdateEvent } from '../../models/enum/enum.model';
2+
import { BusinessCentralOnboardingState, BusinessCentralUpdateEvent, ClickEvent, IntacctOnboardingState, IntacctUpdateEvent, Page, QBDOnboardingState, Sage300OnboardingState, Sage300UpdateEvent, TrackingApp, UpdateEvent } from '../../models/enum/enum.model';
33
import { MappingAlphabeticalFilterAdditionalProperty, ResolveMappingErrorProperty, UpdateEventAdditionalProperty, UpdateIntacctEventAdditionalProperty } from '../../models/misc/tracking.model';
44
import { QBDAdvancedSettingsPost } from '../../models/qbd/qbd-configuration/advanced-setting.model';
55
import { QBDExportSettingPost } from '../../models/qbd/qbd-configuration/export-setting.model';
@@ -52,14 +52,14 @@ export class TrackingService {
5252
return (window as any).analytics;
5353
}
5454

55-
eventTrack(action: string, properties: any = {}): void {
55+
eventTrack(action: string, trackingApp?: TrackingApp, properties: any = {}): void {
5656
const flattenedObject = this.flattenObject(properties);
5757
properties = {
5858
...flattenedObject,
5959
Asset: 'Integration Settings Web'
6060
};
6161
if (this.tracking) {
62-
this.tracking.track(action, properties);
62+
this.tracking.track(`${trackingApp ? trackingApp : 'Integration Settings Web'}: ${action}`, properties);
6363
}
6464
}
6565

@@ -75,44 +75,40 @@ export class TrackingService {
7575
this.eventTrack('Opened Landing Page');
7676
}
7777

78-
onClickEvent(eventName: ClickEvent): void {
79-
this.eventTrack(`Click event: ${eventName}`);
78+
onClickEvent(trackingApp: TrackingApp, eventName: ClickEvent): void {
79+
this.eventTrack(`Click event: ${eventName}`, trackingApp, {});
8080
}
8181

82-
onErrorPage(): void {
83-
this.eventTrack('Error Page shown');
84-
}
85-
86-
trackTimeSpent(page: Page, sessionStartTime: Date): void {
82+
trackTimeSpent(trackingApp: TrackingApp, page: Page, sessionStartTime: Date): void {
8783
const differenceInMs = new Date().getTime() - sessionStartTime.getTime();
88-
this.eventTrack(`Time Spent on ${page} page`, {durationInSeconds: differenceInMs / 1000});
84+
this.eventTrack(`Time Spent on ${page} page`, trackingApp, {durationInSeconds: differenceInMs / 1000});
8985
}
9086

91-
onOnboardingStepCompletion(eventName: QBDOnboardingState | Sage300OnboardingState | BusinessCentralOnboardingState, stepNumber: number, additionalProperties: QBDExportSettingPost | QBDFieldMappingPost | QBDAdvancedSettingsPost | void | Sage300ExportSettingPost | Sage300ImportSettingPost | Sage300AdvancedSettingPost | BusinessCentralExportSettingPost | BusinessCentralImportSettingsPost |BusinessCentralAdvancedSettingsPost ): void {
92-
this.eventTrack(`Step ${stepNumber} completed: ${eventName}`, additionalProperties);
87+
onOnboardingStepCompletion(trackingApp: TrackingApp, eventName: QBDOnboardingState | Sage300OnboardingState | BusinessCentralOnboardingState, stepNumber: number, additionalProperties: QBDExportSettingPost | QBDFieldMappingPost | QBDAdvancedSettingsPost | void | Sage300ExportSettingPost | Sage300ImportSettingPost | Sage300AdvancedSettingPost | BusinessCentralExportSettingPost | BusinessCentralImportSettingsPost |BusinessCentralAdvancedSettingsPost ): void {
88+
this.eventTrack(`Step ${stepNumber} completed: ${eventName}`, trackingApp, additionalProperties);
9389
}
9490

95-
integrationsOnboardingCompletion(eventName: IntacctOnboardingState, stepNumber: number, additionalProperties: LocationEntityPost | ExportSettingPost | ImportSettingPost | AdvancedSettingsPost | void): void {
96-
this.eventTrack(`Step ${stepNumber} completed: ${eventName}`, additionalProperties);
91+
integrationsOnboardingCompletion(trackingApp: TrackingApp, eventName: IntacctOnboardingState, stepNumber: number, additionalProperties: LocationEntityPost | ExportSettingPost | ImportSettingPost | AdvancedSettingsPost | void): void {
92+
this.eventTrack(`Step ${stepNumber} completed: ${eventName}`, trackingApp, additionalProperties);
9793
}
9894

99-
onUpdateEvent(eventName: UpdateEvent | Sage300UpdateEvent | BusinessCentralUpdateEvent, additionalProperties: Partial<UpdateEventAdditionalProperty> | void): void {
100-
this.eventTrack(`Update event: ${eventName}`, additionalProperties);
95+
onUpdateEvent(trackingApp: TrackingApp, eventName: UpdateEvent | Sage300UpdateEvent | BusinessCentralUpdateEvent, additionalProperties: Partial<UpdateEventAdditionalProperty> | void): void {
96+
this.eventTrack(`Update event: ${eventName}`, trackingApp, additionalProperties);
10197
}
10298

10399
intacctUpdateEvent (eventName: IntacctUpdateEvent, additionalProperties: Partial<UpdateIntacctEventAdditionalProperty> | void): void {
104-
this.eventTrack(`Update event: ${eventName}`, additionalProperties);
100+
this.eventTrack(`Update event: ${eventName}`, TrackingApp.INTACCT, additionalProperties);
105101
}
106102

107-
onDateFilter(properties: {filterType: 'existing' | 'custom', startDate: Date, endDate: Date}): void {
108-
this.eventTrack('Date filter', properties);
103+
onDateFilter(trackingApp: TrackingApp, properties: {filterType: 'existing' | 'custom', startDate: Date, endDate: Date}): void {
104+
this.eventTrack('Date filter', trackingApp, properties);
109105
}
110106

111-
onMappingsAlphabeticalFilter(properties: MappingAlphabeticalFilterAdditionalProperty): void {
112-
this.eventTrack('Mappings Alphabetical Filter', properties);
107+
onMappingsAlphabeticalFilter(trackingApp: TrackingApp, properties: MappingAlphabeticalFilterAdditionalProperty): void {
108+
this.eventTrack('Mappings Alphabetical Filter', trackingApp, properties);
113109
}
114110

115-
onErrorResolve(properties: ResolveMappingErrorProperty): void {
116-
this.eventTrack('Resolve Mapping Error', properties);
111+
onErrorResolve(trackingApp: TrackingApp, properties: ResolveMappingErrorProperty): void {
112+
this.eventTrack('Resolve Mapping Error', trackingApp, properties);
117113
}
118114
}

src/app/integrations/bamboo-hr/bamboo-hr.component.ts

+7-7
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { MessageService } from 'primeng/api';
44
import { catchError, concat, merge, of, toArray } from 'rxjs';
55
import { brandingConfig, brandingKbArticles } from 'src/app/branding/branding-config';
66
import { BambooHr, BambooHRConfiguration, BambooHRConfigurationPost, BambooHrModel, EmailOption } from 'src/app/core/models/bamboo-hr/bamboo-hr.model';
7-
import { ClickEvent, Page, ToastSeverity } from 'src/app/core/models/enum/enum.model';
7+
import { ClickEvent, Page, ToastSeverity, TrackingApp } from 'src/app/core/models/enum/enum.model';
88
import { Org } from 'src/app/core/models/org/org.model';
99
import { BambooHrService } from 'src/app/core/services/bamboo-hr/bamboo-hr.service';
1010
import { TrackingService } from 'src/app/core/services/integration/tracking.service';
@@ -61,7 +61,7 @@ export class BambooHrComponent implements OnInit {
6161
) { }
6262

6363
openDialog(): void {
64-
this.trackingService.onClickEvent(ClickEvent.CONNECT_BAMBOO_HR);
64+
this.trackingService.onClickEvent(TrackingApp.BAMBOO_HR, ClickEvent.CONNECT_BAMBOO_HR);
6565
this.showDialog = true;
6666
}
6767

@@ -81,7 +81,7 @@ export class BambooHrComponent implements OnInit {
8181
this.isBambooConnectionInProgress = false;
8282
this.showDialog = false;
8383
this.displayToastMessage(ToastSeverity.SUCCESS, 'Connected Bamboo HR Successfully');
84-
this.trackingService.trackTimeSpent(Page.BAMBOO_HR_LANDING, this.sessionStartTime);
84+
this.trackingService.trackTimeSpent(TrackingApp.BAMBOO_HR, Page.BAMBOO_HR_LANDING, this.sessionStartTime);
8585
this.sessionStartTime = new Date();
8686
}, () => {
8787
this.displayToastMessage(ToastSeverity.ERROR, 'Connecting Bamboo HR Failed', 5000);
@@ -94,19 +94,19 @@ export class BambooHrComponent implements OnInit {
9494
}
9595

9696
configurationUpdatesHandler(payload: BambooHRConfigurationPost): void {
97-
this.trackingService.onClickEvent(ClickEvent.CONFIGURE_BAMBOO_HR);
97+
this.trackingService.onClickEvent(TrackingApp.BAMBOO_HR, ClickEvent.CONFIGURE_BAMBOO_HR);
9898
this.isConfigurationSaveInProgress = true;
9999
this.bambooHrService.postConfigurations(payload).subscribe((updatedConfiguration: BambooHRConfiguration) => {
100100
this.bambooHrConfiguration = updatedConfiguration;
101101
this.hideRefreshIcon = false;
102102
this.isConfigurationSaveInProgress = false;
103103
this.displayToastMessage(ToastSeverity.SUCCESS, 'Configuration saved successfully');
104-
this.trackingService.trackTimeSpent(Page.CONFIGURE_BAMBOO_HR, this.sessionStartTime);
104+
this.trackingService.trackTimeSpent(TrackingApp.BAMBOO_HR, Page.CONFIGURE_BAMBOO_HR, this.sessionStartTime);
105105
});
106106
}
107107

108108
syncEmployees(): void {
109-
this.trackingService.onClickEvent(ClickEvent.SYNC_BAMBOO_HR_EMPLOYEES);
109+
this.trackingService.onClickEvent(TrackingApp.BAMBOO_HR, ClickEvent.SYNC_BAMBOO_HR_EMPLOYEES);
110110
this.hideRefreshIcon = true;
111111
this.displayToastMessage(ToastSeverity.SUCCESS, 'Syncing Employees Started');
112112
this.bambooHrService.syncEmployees().subscribe(() => {
@@ -115,7 +115,7 @@ export class BambooHrComponent implements OnInit {
115115
}
116116

117117
disconnectBambooHr(): void {
118-
this.trackingService.onClickEvent(ClickEvent.DISCONNECT_BAMBOO_HR);
118+
this.trackingService.onClickEvent(TrackingApp.BAMBOO_HR, ClickEvent.DISCONNECT_BAMBOO_HR);
119119
this.isLoading = true;
120120
this.bambooHrService.disconnectBambooHr().subscribe(() => {
121121
this.displayToastMessage(ToastSeverity.SUCCESS, 'Disconnected Bamboo HR Successfully');

src/app/integrations/bamboo-hr/configuration/configuration.component.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms';
33
import { DropdownFilterOptions } from 'primeng/dropdown';
44
import { brandingConfig } from 'src/app/branding/branding-config';
55
import { BambooHRConfiguration, BambooHRConfigurationPost, BambooHrModel, EmailOption } from 'src/app/core/models/bamboo-hr/bamboo-hr.model';
6-
import { ClickEvent } from 'src/app/core/models/enum/enum.model';
6+
import { ClickEvent, TrackingApp } from 'src/app/core/models/enum/enum.model';
77
import { Org } from 'src/app/core/models/org/org.model';
88
import { TrackingService } from 'src/app/core/services/integration/tracking.service';
99
import { OrgService } from 'src/app/core/services/org/org.service';
@@ -62,7 +62,7 @@ export class ConfigurationComponent implements OnInit {
6262
}
6363

6464
addEmail(): void {
65-
this.trackingService.onClickEvent(ClickEvent.ADD_BAMBOO_HR_EMAIL_MANUALLY);
65+
this.trackingService.onClickEvent(TrackingApp.BAMBOO_HR, ClickEvent.ADD_BAMBOO_HR_EMAIL_MANUALLY);
6666
const selectedEmails = this.cofigurationForm.value.emails || [];
6767
selectedEmails.push(this.addEmailForm.value);
6868

src/app/integrations/business-central/business-central-main/business-central-export-log/business-central-complete-export-log/business-central-complete-export-log.component.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Component, OnInit } from '@angular/core';
22
import { FormBuilder, FormGroup } from '@angular/forms';
33
import { AccountingExport, AccountingExportList, AccountingExportModel } from 'src/app/core/models/db/accounting-export.model';
4-
import { AccountingExportStatus, AccountingExportType, AppName, BusinessCentralExportType, PaginatorPage } from 'src/app/core/models/enum/enum.model';
4+
import { AccountingExportStatus, AccountingExportType, AppName, BusinessCentralExportType, PaginatorPage, TrackingApp } from 'src/app/core/models/enum/enum.model';
55
import { Paginator } from 'src/app/core/models/misc/paginator.model';
66
import { DateFilter, SelectedDateFilter } from 'src/app/core/models/qbd/misc/date-filter.model';
77
import { Expense } from 'src/app/core/models/si/db/expense.model';
@@ -109,7 +109,7 @@ export class BusinessCentralCompleteExportLogComponent implements OnInit {
109109
filterType,
110110
...selectedDateFilter
111111
};
112-
this.trackingService.onDateFilter(trackingProperty);
112+
this.trackingService.onDateFilter(TrackingApp.BUSINESS_CENTRAL, trackingProperty);
113113
}
114114

115115
private setupForm(): void {

src/app/integrations/business-central/business-central-main/business-central-export-log/business-central-skipped-export-log/business-central-skipped-export-log.component.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Component, OnInit } from '@angular/core';
22
import { FormBuilder, FormGroup } from '@angular/forms';
33
import { AccountingExportModel, SkippedAccountingExportModel } from 'src/app/core/models/db/accounting-export.model';
4-
import { PaginatorPage } from 'src/app/core/models/enum/enum.model';
4+
import { PaginatorPage, TrackingApp } from 'src/app/core/models/enum/enum.model';
55
import { Paginator } from 'src/app/core/models/misc/paginator.model';
66
import { DateFilter, SelectedDateFilter } from 'src/app/core/models/qbd/misc/date-filter.model';
77
import { SkipExportList, SkipExportLog, SkipExportLogResponse } from 'src/app/core/models/si/db/expense-group.model';
@@ -130,7 +130,7 @@ export class BusinessCentralSkippedExportLogComponent implements OnInit {
130130
filterType,
131131
...selectedDateFilter
132132
};
133-
this.trackingService.onDateFilter(trackingProperty);
133+
this.trackingService.onDateFilter(TrackingApp.BUSINESS_CENTRAL, trackingProperty);
134134
}
135135

136136
ngOnInit(): void {

src/app/integrations/business-central/business-central-shared/business-central-advanced-settings/business-central-advanced-settings.component.html

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
<div *ngIf="advancedSettingForm.value.scheduleEnabled">
3434
<app-configuration-schedule-export
3535
[form]="advancedSettingForm"
36+
[appName]="appName"
3637
[isFieldMandatory]="false"
3738
[mandatoryErrorListName]="'automatic export method'"
3839
[label]="'Set up export frequency'"

src/app/integrations/business-central/business-central-shared/business-central-advanced-settings/business-central-advanced-settings.component.ts

+5-4
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { TrackingService } from 'src/app/core/services/integration/tracking.serv
1212
import { BusinessCentralAdvancedSettingsGet, BusinessCentralAdvancedSettingsModel } from 'src/app/core/models/business-central/business-central-configuration/business-central-advanced-settings.model';
1313
import { FormGroup } from '@angular/forms';
1414
import { brandingConfig, brandingKbArticles } from 'src/app/branding/branding-config';
15-
import { AppName, BusinessCentralOnboardingState, BusinessCentralUpdateEvent, ConfigurationCta, Page, ToastSeverity } from 'src/app/core/models/enum/enum.model';
15+
import { AppName, BusinessCentralOnboardingState, BusinessCentralUpdateEvent, ConfigurationCta, Page, ToastSeverity, TrackingApp } from 'src/app/core/models/enum/enum.model';
1616

1717
@Component({
1818
selector: 'app-business-central-advanced-settings',
@@ -39,7 +39,7 @@ export class BusinessCentralAdvancedSettingsComponent implements OnInit {
3939

4040
isOnboarding: boolean;
4141

42-
appName: string = AppName.BUSINESS_CENTRAL;
42+
appName: AppName = AppName.BUSINESS_CENTRAL;
4343

4444
hours: HourOption[] = [];
4545

@@ -143,11 +143,12 @@ export class BusinessCentralAdvancedSettingsComponent implements OnInit {
143143
this.advancedSettingsService.postAdvancedSettings(advancedSettingPayload).subscribe((advancedSettingsResponse: BusinessCentralAdvancedSettingsGet) => {
144144
this.isSaveInProgress = false;
145145
this.toastService.displayToastMessage(ToastSeverity.SUCCESS, 'Advanced settings saved successfully');
146-
this.trackingService.trackTimeSpent(Page.ADVANCED_SETTINGS_BUSINESS_CENTRAL, this.sessionStartTime);
146+
this.trackingService.trackTimeSpent(TrackingApp.BUSINESS_CENTRAL, Page.ADVANCED_SETTINGS_BUSINESS_CENTRAL, this.sessionStartTime);
147147
if (this.workspaceService.getOnboardingState() === BusinessCentralOnboardingState.ADVANCED_SETTINGS) {
148-
this.trackingService.onOnboardingStepCompletion(BusinessCentralOnboardingState.ADVANCED_SETTINGS, 3, advancedSettingPayload);
148+
this.trackingService.onOnboardingStepCompletion(TrackingApp.BUSINESS_CENTRAL, BusinessCentralOnboardingState.ADVANCED_SETTINGS, 3, advancedSettingPayload);
149149
} else {
150150
this.trackingService.onUpdateEvent(
151+
TrackingApp.BUSINESS_CENTRAL,
151152
BusinessCentralUpdateEvent.ADVANCED_SETTINGS_BUSINESS_CENTRAL,
152153
{
153154
phase: this.helper.getPhase(this.isOnboarding),

0 commit comments

Comments
 (0)