Skip to content

Commit 0e74697

Browse files
authored
feat: QBD direct tracker update (#1126)
* QBD direct tracker update * PR commit fix
1 parent 9dce487 commit 0e74697

File tree

8 files changed

+176
-17
lines changed

8 files changed

+176
-17
lines changed

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,16 @@ export enum TravelperkUpdateEvent {
8282
ADVANCED_SETTINGS_TRAVELPERK = 'Advanced Settings TravelPerk',
8383
}
8484

85+
export enum QbdDirectUpdateEvent {
86+
CONFIRM_PRE_REQUISITES_QBD_DIRECT = 'Confirm Pre Requisites QuickBooks Desktop Connector',
87+
CONNECT_QBD_DIRECT = 'Connect QuickBooks Desktop Connector',
88+
PENDING_QWC_UPLOAD_QBD_DIRECT = 'Pending QWC Upload QuickBooks Desktop Connector',
89+
DESTINATION_SYNC_COMPLETE_QBD_DIRECT = 'Destination Sync Complete QuickBooks Desktop Connector',
90+
EXPORT_SETTING_QBD_DIRECT = 'Export Settings QuickBooks Desktop Connector',
91+
IMPORT_SETTINGS_QBD_DIRECT = 'Import Settings QuickBooks Desktop Connector',
92+
ADVANCED_SETTINGS_QBD_DIRECT = 'Advanced Settings QuickBooks Desktop Connector',
93+
}
94+
8595
export enum AppName {
8696
BAMBOO_HR = 'BambooHR',
8797
QBD = 'QuickBooks Desktop',
@@ -126,6 +136,11 @@ export enum Page {
126136
ADVANCED_SETTINGS_BUSINESS_CENTRAL = 'Advanced Settings BusinessCentral',
127137
PAYMENT_PROFILE_SETTINGS_TRAVELPERK = 'Payment Profile Settings TravelPerk',
128138
ADVANCED_SETTINGS_TRAVELPERK = 'Advanced Settings TravelPerk',
139+
EXPORT_SETTING_QBD_DIRECT = 'Export Settings QuickBooks Desktop Connector',
140+
CONNECT_QBD_DIRECT = 'Connect QuickBooks Desktop Connector',
141+
CONFIRM_PRE_REQUISITES_QBD_DIRECT = 'Confirm Pre Requisites QuickBooks Desktop Connector',
142+
IMPORT_SETTINGS_QBD_DIRECT = 'Import Settings QuickBooks Desktop Connector',
143+
ADVANCED_SETTINGS_QBD_DIRECT = 'Advanced Settings QuickBooks Desktop Connector',
129144
}
130145

131146
export enum ClickEvent {

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,15 @@ import { TravelperkPaymentProfileSettingResponse } from "../travelperk/travelper
1313
import { AdvancedSettingsGet } from "../intacct/intacct-configuration/advanced-settings.model";
1414
import { ExportSettingGet } from "../intacct/intacct-configuration/export-settings.model";
1515
import { ImportSettingGet, ImportSettings } from "../intacct/intacct-configuration/import-settings.model";
16+
import { QbdDirectAdvancedSettingsPost } from "../qbd-direct/qbd-direct-configuration/qbd-direct-advanced-settings.model";
17+
import { QbdDirectExportSettingsPost } from "../qbd-direct/qbd-direct-configuration/qbd-direct-export-settings.model";
18+
import { QbdDirectImportSettingPost } from "../qbd-direct/qbd-direct-configuration/qbd-direct-import-settings.model";
19+
import { Workspace } from "../db/workspaces.model";
1620

1721
export type UpdateEventAdditionalProperty = {
1822
phase: ProgressPhase,
19-
oldState: QBDAdvancedSettingsGet | QBDExportSettingGet | QBDFieldMappingGet | Sage300ExportSettingGet | Sage300ImportSettingGet | Sage300AdvancedSettingGet | null | BusinessCentralExportSettingGet | BusinessCentralImportSettingsGet | BusinessCentralAdvancedSettingsGet | TravelperkPaymentProfileSettingResponse | TravelperkAdvancedSettingPost,
20-
newState: QBDAdvancedSettingsGet | QBDExportSettingGet | QBDFieldMappingGet | Sage300ExportSettingGet | Sage300ImportSettingGet | Sage300AdvancedSettingGet | BusinessCentralExportSettingGet | BusinessCentralImportSettingsGet | BusinessCentralAdvancedSettingsGet | TravelperkPaymentProfileSettingResponse | TravelperkAdvancedSettingPost
23+
oldState: QBDAdvancedSettingsGet | QBDExportSettingGet | QBDFieldMappingGet | Sage300ExportSettingGet | Sage300ImportSettingGet | Sage300AdvancedSettingGet | null | BusinessCentralExportSettingGet | BusinessCentralImportSettingsGet | BusinessCentralAdvancedSettingsGet | TravelperkPaymentProfileSettingResponse | TravelperkAdvancedSettingPost | QbdDirectExportSettingsPost | QbdDirectImportSettingPost | QbdDirectAdvancedSettingsPost | Workspace,
24+
newState: QBDAdvancedSettingsGet | QBDExportSettingGet | QBDFieldMappingGet | Sage300ExportSettingGet | Sage300ImportSettingGet | Sage300AdvancedSettingGet | BusinessCentralExportSettingGet | BusinessCentralImportSettingsGet | BusinessCentralAdvancedSettingsGet | TravelperkPaymentProfileSettingResponse | TravelperkAdvancedSettingPost | QbdDirectExportSettingsPost | QbdDirectImportSettingPost | QbdDirectAdvancedSettingsPost | Workspace
2125
};
2226

2327
export type UpdateIntacctEventAdditionalProperty = {

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Injectable } from '@angular/core';
2-
import { BusinessCentralOnboardingState, NetsuiteOnboardingState, BusinessCentralUpdateEvent, ClickEvent, IntacctOnboardingState, IntacctUpdateEvent, Page, QBDOnboardingState, Sage300OnboardingState, Sage300UpdateEvent, TrackingApp, TravelPerkOnboardingState, TravelperkUpdateEvent, UpdateEvent } from '../../models/enum/enum.model';
2+
import { BusinessCentralOnboardingState, NetsuiteOnboardingState, BusinessCentralUpdateEvent, ClickEvent, IntacctOnboardingState, IntacctUpdateEvent, Page, QBDOnboardingState, Sage300OnboardingState, Sage300UpdateEvent, TrackingApp, TravelPerkOnboardingState, TravelperkUpdateEvent, UpdateEvent, QbdDirectOnboardingState, QbdDirectUpdateEvent } from '../../models/enum/enum.model';
33
import { MappingAlphabeticalFilterAdditionalProperty, ResolveMappingErrorProperty, UpdateEventAdditionalProperty, UpdateIntacctEventAdditionalProperty } from '../../models/misc/tracking.model';
44
import { QBDAdvancedSettingsPost } from '../../models/qbd/qbd-configuration/qbd-advanced-setting.model';
55
import { QBDExportSettingPost } from '../../models/qbd/qbd-configuration/qbd-export-setting.model';
@@ -17,6 +17,9 @@ import { BusinessCentralAdvancedSettingsPost } from '../../models/business-centr
1717
import { NetsuiteSubsidiaryMappingPost } from '../../models/netsuite/netsuite-configuration/netsuite-connector.model';
1818
import { TravelperkPaymentProfileSettingPost } from '../../models/travelperk/travelperk-configuration/travelperk-payment-profile-settings.model';
1919
import { TravelperkAdvancedSettingPost } from '../../models/travelperk/travelperk-configuration/travelperk-advanced-settings.model';
20+
import { QbdDirectAdvancedSettingsPost } from '../../models/qbd-direct/qbd-direct-configuration/qbd-direct-advanced-settings.model';
21+
import { QbdDirectExportSettingsPost } from '../../models/qbd-direct/qbd-direct-configuration/qbd-direct-export-settings.model';
22+
import { QbdDirectImportSettingPost } from '../../models/qbd-direct/qbd-direct-configuration/qbd-direct-import-settings.model';
2023

2124
@Injectable({
2225
providedIn: 'root'
@@ -100,11 +103,11 @@ export class TrackingService {
100103
this.eventTrack(`Step ${stepNumber} completed: ${eventName}`, trackingApp, additionalProperties);
101104
}
102105

103-
integrationsOnboardingCompletion(trackingApp: TrackingApp, eventName: IntacctOnboardingState | NetsuiteOnboardingState, stepNumber: number, additionalProperties: LocationEntityPost | ExportSettingPost | ImportSettingPost | AdvancedSettingsPost | NetsuiteSubsidiaryMappingPost | void): void {
106+
integrationsOnboardingCompletion(trackingApp: TrackingApp, eventName: IntacctOnboardingState | NetsuiteOnboardingState | QbdDirectOnboardingState, stepNumber: number, additionalProperties: LocationEntityPost | ExportSettingPost | ImportSettingPost | AdvancedSettingsPost | NetsuiteSubsidiaryMappingPost | QbdDirectExportSettingsPost | QbdDirectImportSettingPost | QbdDirectAdvancedSettingsPost | void): void {
104107
this.eventTrack(`Step ${stepNumber} completed: ${eventName}`, trackingApp, additionalProperties);
105108
}
106109

107-
onUpdateEvent(trackingApp: TrackingApp, eventName: UpdateEvent | Sage300UpdateEvent | BusinessCentralUpdateEvent | TravelperkUpdateEvent, additionalProperties: Partial<UpdateEventAdditionalProperty> | void): void {
110+
onUpdateEvent(trackingApp: TrackingApp, eventName: UpdateEvent | Sage300UpdateEvent | BusinessCentralUpdateEvent | TravelperkUpdateEvent | QbdDirectUpdateEvent, additionalProperties: Partial<UpdateEventAdditionalProperty> | void): void {
108111
this.eventTrack(`Update event: ${eventName}`, trackingApp, additionalProperties);
109112
}
110113

src/app/integrations/qbd-direct/qbd-direct-onboarding/qbd-direct-onboarding-connector/qbd-direct-onboarding-connector.component.ts

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { QbdDirectSharedModule } from '../../qbd-direct-shared/qbd-direct-shared
33
import { SharedModule } from 'src/app/shared/shared.module';
44
import { brandingConfig, brandingContent, brandingKbArticles } from 'src/app/branding/branding-config';
55
import { BrandingConfiguration } from 'src/app/core/models/branding/branding-configuration.model';
6-
import { AppName, ConfigurationCta, QBDConnectionStatus, QbdDirectOnboardingState, QBDOnboardingState, ToastSeverity } from 'src/app/core/models/enum/enum.model';
6+
import { AppName, ConfigurationCta, Page, ProgressPhase, QBDConnectionStatus, QbdDirectOnboardingState, QbdDirectUpdateEvent, QBDOnboardingState, ToastSeverity, TrackingApp } from 'src/app/core/models/enum/enum.model';
77
import { OnboardingStepper } from 'src/app/core/models/misc/onboarding-stepper.model';
88
import { QbdDirectOnboardingModel } from 'src/app/core/models/qbd-direct/qbd-direct-configuration/qbd-direct-onboarding.model';
99
import { Router } from '@angular/router';
@@ -18,6 +18,7 @@ import { interval, switchMap, from, takeWhile } from 'rxjs';
1818
import { QbdDirectTaskResponse } from 'src/app/core/models/qbd-direct/db/qbd-direct-task-log.model';
1919
import { IntegrationsToastService } from 'src/app/core/services/common/integrations-toast.service';
2020
import { CheckBoxUpdate } from 'src/app/core/models/common/helper.model';
21+
import { TrackingService } from 'src/app/core/services/integration/tracking.service';
2122

2223
@Component({
2324
selector: 'app-qbd-direct-onboarding-connector',
@@ -74,12 +75,17 @@ export class QbdDirectOnboardingConnectorComponent implements OnInit {
7475

7576
appName: string = AppName.QBD_DIRECT;
7677

78+
sessionStartTime: Date = new Date();
79+
80+
workspace: QbdDirectWorkspace;
81+
7782
constructor(
7883
private router: Router,
7984
private workspaceService: WorkspaceService,
8085
private storageService: StorageService,
8186
private qbdDirectConnectorService: QbdDirectConnectorService,
82-
private toastService: IntegrationsToastService
87+
private toastService: IntegrationsToastService,
88+
private trackingService: TrackingService
8389
) { }
8490

8591
triggerDownload(filePath: string) {
@@ -112,6 +118,22 @@ export class QbdDirectOnboardingConnectorComponent implements OnInit {
112118
proceedToConnection() {
113119
this.isDownloadfileLoading = true;
114120
this.workspaceService.updateWorkspaceOnboardingState({onboarding_state: QbdDirectOnboardingState.PENDING_QWC_UPLOAD}).subscribe((workspaceResponse: QbdDirectWorkspace) => {
121+
this.workspace = workspaceResponse;
122+
if (this.workspaceService.getOnboardingState() === QbdDirectOnboardingState.CONNECTION) {
123+
this.trackingService.integrationsOnboardingCompletion(TrackingApp.QBD_DIRECT, QbdDirectOnboardingState.CONNECTION, 2);
124+
} else {
125+
const oldWorkspaceResponse = workspaceResponse;
126+
oldWorkspaceResponse.onboarding_state = QbdDirectOnboardingState.CONNECTION;
127+
this.trackingService.onUpdateEvent(
128+
TrackingApp.QBD_DIRECT,
129+
QbdDirectUpdateEvent.CONNECT_QBD_DIRECT,
130+
{
131+
phase: ProgressPhase.ONBOARDING,
132+
oldState: oldWorkspaceResponse,
133+
newState: workspaceResponse
134+
}
135+
);
136+
}
115137
this.isDownloadStepCompleted = true;
116138
this.isDownloadfileLoading = false;
117139
});
@@ -189,6 +211,21 @@ export class QbdDirectOnboardingConnectorComponent implements OnInit {
189211
} else {
190212
this.handleDataSyncState(workspaceResponse[0]);
191213
}
214+
if (workspaceResponse[0].onboarding_state in [QbdDirectOnboardingState.DESTINATION_SYNC_IN_PROGRESS, QbdDirectOnboardingState.DESTINATION_SYNC_COMPLETE]) {
215+
this.trackingService.integrationsOnboardingCompletion(TrackingApp.QBD_DIRECT, QbdDirectOnboardingState.PENDING_QWC_UPLOAD, 2);
216+
} else {
217+
const oldWorkspaceResponse = this.workspace;
218+
oldWorkspaceResponse.onboarding_state = QbdDirectOnboardingState.PENDING_QWC_UPLOAD;
219+
this.trackingService.onUpdateEvent(
220+
TrackingApp.QBD_DIRECT,
221+
QbdDirectUpdateEvent.PENDING_QWC_UPLOAD_QBD_DIRECT,
222+
{
223+
phase: ProgressPhase.ONBOARDING,
224+
oldState: oldWorkspaceResponse,
225+
newState: workspaceResponse[0]
226+
}
227+
);
228+
}
192229
});
193230
}
194231

@@ -216,6 +253,22 @@ export class QbdDirectOnboardingConnectorComponent implements OnInit {
216253
proceedToExportSetting() {
217254
this.isLoading = true;
218255
this.workspaceService.updateWorkspaceOnboardingState({onboarding_state: QbdDirectOnboardingState.EXPORT_SETTINGS}).subscribe((workspaceResponse: QbdDirectWorkspace) => {
256+
this.trackingService.trackTimeSpent(TrackingApp.QBD_DIRECT, Page.CONNECT_QBD_DIRECT, this.sessionStartTime);
257+
if (this.workspaceService.getOnboardingState() === QbdDirectOnboardingState.DESTINATION_SYNC_COMPLETE) {
258+
this.trackingService.integrationsOnboardingCompletion(TrackingApp.QBD_DIRECT, QbdDirectOnboardingState.DESTINATION_SYNC_COMPLETE, 2);
259+
} else {
260+
const oldWorkspaceResponse = workspaceResponse;
261+
oldWorkspaceResponse.onboarding_state = QbdDirectOnboardingState.DESTINATION_SYNC_COMPLETE;
262+
this.trackingService.onUpdateEvent(
263+
TrackingApp.QBD_DIRECT,
264+
QbdDirectUpdateEvent.DESTINATION_SYNC_COMPLETE_QBD_DIRECT,
265+
{
266+
phase: ProgressPhase.ONBOARDING,
267+
oldState: oldWorkspaceResponse,
268+
newState: workspaceResponse
269+
}
270+
);
271+
}
219272
this.workspaceService.setOnboardingState(workspaceResponse.onboarding_state);
220273
this.router.navigate([`/integrations/qbd_direct/onboarding/export_settings`]);
221274
this.isLoading = false;

src/app/integrations/qbd-direct/qbd-direct-onboarding/qbd-direct-onboarding-pre-requisite/qbd-direct-onboarding-pre-requisite.component.ts

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@ import { brandingContent, brandingKbArticles } from 'src/app/branding/branding-c
55
import { brandingConfig } from 'src/app/branding/c1-contents-config';
66
import { BrandingConfiguration } from 'src/app/core/models/branding/branding-configuration.model';
77
import { CheckBoxUpdate } from 'src/app/core/models/common/helper.model';
8-
import { AppName, ConfigurationCta, QbdDirectOnboardingState, QBDPreRequisiteState } from 'src/app/core/models/enum/enum.model';
8+
import { AppName, ConfigurationCta, Page, ProgressPhase, QbdDirectOnboardingState, QbdDirectUpdateEvent, QBDPreRequisiteState, TrackingApp } from 'src/app/core/models/enum/enum.model';
99
import { OnboardingStepper } from 'src/app/core/models/misc/onboarding-stepper.model';
1010
import { QbdDirectWorkspace } from 'src/app/core/models/qbd-direct/db/qbd-direct-workspaces.model';
1111
import { QBDPrerequisiteObject } from 'src/app/core/models/qbd-direct/qbd-direct-configuration/qbd-direct-connector.model';
1212
import { QbdDirectOnboardingModel } from 'src/app/core/models/qbd-direct/qbd-direct-configuration/qbd-direct-onboarding.model';
1313
import { WorkspaceService } from 'src/app/core/services/common/workspace.service';
14+
import { TrackingService } from 'src/app/core/services/integration/tracking.service';
1415
import { SharedModule } from 'src/app/shared/shared.module';
1516

1617
@Component({
@@ -61,9 +62,12 @@ export class QbdDirectOnboardingPreRequisiteComponent {
6162

6263
qbdPreRequisiteState = QBDPreRequisiteState;
6364

65+
sessionStartTime: Date = new Date();
66+
6467
constructor(
6568
private router: Router,
66-
private workspaceService: WorkspaceService
69+
private workspaceService: WorkspaceService,
70+
private trackingService: TrackingService
6771
) { }
6872

6973
updateConnectorStatus(status: CheckBoxUpdate): void {
@@ -76,6 +80,22 @@ export class QbdDirectOnboardingPreRequisiteComponent {
7680
continueToNextStep(): void{
7781
this.saveInProgress = true;
7882
this.workspaceService.updateWorkspaceOnboardingState({onboarding_state: QbdDirectOnboardingState.CONNECTION}).subscribe((workspaceResponse: QbdDirectWorkspace) => {
83+
this.trackingService.trackTimeSpent(TrackingApp.QBD_DIRECT, Page.CONFIRM_PRE_REQUISITES_QBD_DIRECT, this.sessionStartTime);
84+
if (this.workspaceService.getOnboardingState() === QbdDirectOnboardingState.CONFIRM_PRE_REQUISITES) {
85+
this.trackingService.integrationsOnboardingCompletion(TrackingApp.QBD_DIRECT, QbdDirectOnboardingState.CONFIRM_PRE_REQUISITES, 1);
86+
} else {
87+
const oldWorkspaceResponse = workspaceResponse;
88+
oldWorkspaceResponse.onboarding_state = QbdDirectOnboardingState.CONFIRM_PRE_REQUISITES;
89+
this.trackingService.onUpdateEvent(
90+
TrackingApp.QBD_DIRECT,
91+
QbdDirectUpdateEvent.CONFIRM_PRE_REQUISITES_QBD_DIRECT,
92+
{
93+
phase: ProgressPhase.ONBOARDING,
94+
oldState: oldWorkspaceResponse,
95+
newState: workspaceResponse
96+
}
97+
);
98+
}
7999
this.workspaceService.setOnboardingState(workspaceResponse.onboarding_state);
80100
this.saveInProgress = false;
81101
this.router.navigate([`/integrations/qbd_direct/onboarding/connector`]);

0 commit comments

Comments
 (0)