Skip to content

Commit 304ba01

Browse files
feat: Qbd direct je changes (#1091)
* fead: folder creation * PR comments fix * feat: Qbd checkbox button creation (#1054) * feat: checkbox button creation * PR comments fix * feat: onboarding basic setup (#1055) * feat: onboarding basic setup * feat: qbd direct onboarding landing page (#1056) * feat: qbd direct onboarding landing page * feat: qbd-direct-onboarding-pre-requisite implementation * PR comments fix * PR fix * updateWorkspaceOnboardingState service return type update * qbd direct logo update * feat: qbd-direct onboarding prerequisite UI implementation (#1058) * feat: qbd-direct-onboarding-pre-requisite implementation * styling changes * unit test fix * step footer contentt fix * pre requisite Ui updation * PR comments fix * PR comments fix * feat: Download qwd file UI changes (#1059) * feat: Download qwd file UI changes * download file Ui updation * download file Ui updation * download file Ui updation * download file Ui updation * feat: qbd connector setup UI changes (#1060) * feat: qbd connector setup UI changes * Merge branch qbd-direct-onboarding-download-file-UI into qbd-direct-step-connector-UI * feat: Qbd direct connection data sync UI changes (#1061) * feat: Qbd direct connection data sync UI changes * input made required * svg update * feat: qbd direct pre requisite ts changes (#1062) * feat: qbd direct pre requisite ts changes * feat: qbd direct pre requisite ts changes * feat: qbd direct connector download file ts changes (#1063) * feat: qbd direct connector download file ts changes * feat: qbd direct connector setup connector ts changes (#1064) * feat: qbd direct connector setup connector ts changes * feat: qbd direct connector data sync up ts changes (#1065) * PR comment fix * PR comment fix * Qbd direct connector data sync up ts (#1070) * feat: qbd direct pre requisite ts changes * feat: qbd direct pre requisite ts changes * feat: qbd direct connector download file ts changes * feat: qbd direct connector setup connector ts changes * feat: qbd direct connector data sync up ts changes * feat: QBD direct main connection page business logic (#1066) * feat: QBD direct main connection page business logic * onboarding connection ts changes * onboarding connection ts changes --------- Co-authored-by: ashwin1111 <[email protected]> --------- Co-authored-by: ashwin1111 <[email protected]> --------- Co-authored-by: ashwin1111 <[email protected]> --------- Co-authored-by: ashwin1111 <[email protected]> --------- Co-authored-by: ashwin1111 <[email protected]> --------- Co-authored-by: ashwin1111 <[email protected]> --------- Co-authored-by: ashwin1111 <[email protected]> * checkbox button fix * QA fixes * qa fixes * qa fixes * fix: qbd direct export settings onboarding changes and content changes (#1082) * qbd direct export settings onboarding changes and content changes * fix: qbd direct import settings onboarding changes and content changes (#1083) * qbd direct import settings onboarding changes and content changes * qbd direct advanced settings onboarding changes and content changes (#1084) * QA fixes * QBD direct bug fixes * QBD direct bug fixes * JE changes in export settings and mapping * PR comments fix --------- Co-authored-by: ashwin1111 <[email protected]>
1 parent b30ccf6 commit 304ba01

File tree

7 files changed

+83
-39
lines changed

7 files changed

+83
-39
lines changed

src/app/branding/c1-contents-config.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ export const c1Contents = {
5858
creditCardExpenseNameinJESubLabel: 'You can select either the \'Merchant Name\' or the \'Employee Name\' to appear in the \'Name\' field of your Journal Entries.',
5959
defaultCCCAccountLabel: 'Set Default Credit Card Account as',
6060
defaultCCCAccountSubLabel: 'Post all your company corporate card transactions to a default credit card account.',
61-
defaultCCCAccountPayableLabel: 'To which accounts payable account should the ',
62-
defaultCCCAccountPayableSubLabel: 'The integration will post the offset credit entry in '
61+
defaultCCCAccountPayableLabel: 'Select the Default Credit Account for adding ',
62+
defaultCCCAccountPayableSubLabel: 'This account will be used for the credit line of the '
6363
}
6464
},
6565
importSetting: {

src/app/branding/fyle-contents-config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export const fyleContents = {
5858
creditCardExpenseNameinJESubLabel: 'You can select either the \'Merchant Name\' or the \'Employee Name\' to appear in the \'Name\' field of your journal entries.',
5959
defaultCCCAccountLabel: 'Set a Default Credit Card Account',
6060
defaultCCCAccountSubLabel: 'If there\'s no card-to-card mapping or when an expense lacks a corporate card transaction associated with it, expenses will be posted to the default card configured here.',
61-
defaultCCCAccountPayableLabel: 'Select the Default Credit Account for adding Journal Entry ',
61+
defaultCCCAccountPayableLabel: 'Select the Default Credit Account for adding ',
6262
defaultCCCAccountPayableSubLabel: 'This account will be used for the credit line of the '
6363
}
6464
},

src/app/core/models/qbd-direct/qbd-direct-configuration/qbd-direct-export-settings.model.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,8 @@ export class QbdDirectExportSettingModel extends ExportSettingModel {
172172
return form.controls.reimbursableExportType.value === QBDReimbursableExpensesObject.JOURNAL_ENTRY;
173173
case 'nameInJE':
174174
return form.controls.creditCardExportType.value === QBDCorporateCreditCardExpensesObject.JOURNAL_ENTRY;
175+
case 'defaultCreditCardAccountName':
176+
return form.controls.creditCardExportType.value === QBDCorporateCreditCardExpensesObject.CREDIT_CARD_PURCHASE;
175177
default:
176178
return false;
177179
}
@@ -181,7 +183,7 @@ export class QbdDirectExportSettingModel extends ExportSettingModel {
181183

182184
const exportSettingValidatorRule: ExportSettingValidatorRule = {
183185
reimbursableExpense: ['reimbursableExportType', 'reimbursableExportGroup', 'reimbursableExportDate', 'reimbursableExpenseState', 'employeeMapping'],
184-
creditCardExpense: ['creditCardExportType', 'creditCardExportGroup', 'creditCardExportDate', 'creditCardExpenseState', 'defaultCreditCardAccountName']
186+
creditCardExpense: ['creditCardExportType', 'creditCardExportGroup', 'creditCardExportDate', 'creditCardExpenseState']
185187
};
186188

187189
const exportModuleRule: ExportModuleRule[] = [
@@ -195,7 +197,7 @@ export class QbdDirectExportSettingModel extends ExportSettingModel {
195197
{
196198
formController: 'creditCardExportType',
197199
requiredValue: {
198-
[QBDCorporateCreditCardExpensesObject.CREDIT_CARD_PURCHASE]: [],
200+
[QBDCorporateCreditCardExpensesObject.CREDIT_CARD_PURCHASE]: ['defaultCreditCardAccountName'],
199201
[QBDCorporateCreditCardExpensesObject.JOURNAL_ENTRY]: ['defaultCCCAccountsPayableAccountName', 'nameInJE']
200202
}
201203
}

src/app/core/services/common/mapping.service.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,9 +170,9 @@ export class MappingService {
170170
return this.apiService.post(`/workspaces/${this.workspaceService.getWorkspaceId()}/mappings/`, mapping);
171171
}
172172

173-
getPaginatedDestinationAttributes(attributeType: string, value?: string, display_name?: string, appName?: string): Observable<PaginatedDestinationAttribute> {
173+
getPaginatedDestinationAttributes(attributeType: string, value?: string, display_name?: string, appName?: string, detailed_accout_type?: string[]): Observable<PaginatedDestinationAttribute> {
174174
const workspaceId = this.workspaceService.getWorkspaceId();
175-
const params: {limit: number, offset: number, attribute_type: string, active?: boolean, value__icontains?: string, value?: string, display_name__in?: string} = {
175+
const params: {limit: number, offset: number, attribute_type: string, active?: boolean, value__icontains?: string, value?: string, display_name__in?: string, detail__account_type__in?: string[]} = {
176176
limit: 100,
177177
offset: 0,
178178
attribute_type: attributeType,
@@ -191,6 +191,10 @@ export class MappingService {
191191
params.display_name__in = display_name;
192192
}
193193

194+
if (detailed_accout_type) {
195+
params.detail__account_type__in = detailed_accout_type;
196+
}
197+
194198
return this.apiService.get(`/workspaces/${workspaceId}/mappings/paginated_destination_attributes/`, params);
195199
}
196200

src/app/integrations/qbd-direct/qbd-direct-main/qbd-direct-mapping/qbd-direct-base-mapping/qbd-direct-base-mapping.component.ts

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@ import { forkJoin } from 'rxjs';
55
import { brandingConfig } from 'src/app/branding/c1-contents-config';
66
import { DestinationAttribute } from 'src/app/core/models/db/destination-attribute.model';
77
import { MappingSetting } from 'src/app/core/models/db/mapping-setting.model';
8-
import { FyleField, AppName, AccountingField, QBDReimbursableExpensesObject, QBDCorporateCreditCardExpensesObject } from 'src/app/core/models/enum/enum.model';
8+
import { FyleField, AppName, AccountingField, QBDReimbursableExpensesObject, QBDCorporateCreditCardExpensesObject, NameInJournalEntry } from 'src/app/core/models/enum/enum.model';
9+
import { QbdDirectDestinationAttribute } from 'src/app/core/models/qbd-direct/db/qbd-direct-destination-attribuite.model';
910
import { QbdDirectExportSettingGet } from 'src/app/core/models/qbd-direct/qbd-direct-configuration/qbd-direct-export-settings.model';
1011
import { IntegrationsToastService } from 'src/app/core/services/common/integrations-toast.service';
1112
import { MappingService } from 'src/app/core/services/common/mapping.service';
1213
import { WorkspaceService } from 'src/app/core/services/common/workspace.service';
1314
import { QbdDirectExportSettingsService } from 'src/app/core/services/qbd-direct/qbd-direct-configuration/qbd-direct-export-settings.service';
15+
import { QbdDirectImportSettingsService } from 'src/app/core/services/qbd-direct/qbd-direct-configuration/qbd-direct-import-settings.service';
1416
import { SharedModule } from 'src/app/shared/shared.module';
1517

1618
@Component({
@@ -46,12 +48,17 @@ export class QbdDirectBaseMappingComponent implements OnInit {
4648

4749
brandingConfig = brandingConfig;
4850

51+
nameInJE: NameInJournalEntry;
52+
53+
chartOfAccounts: string[];
54+
4955
constructor(
5056
private route: ActivatedRoute,
5157
private mappingService: MappingService,
5258
private toastService: IntegrationsToastService,
5359
private workspaceService: WorkspaceService,
54-
private expoerSettingService: QbdDirectExportSettingsService
60+
private exportSettingService: QbdDirectExportSettingsService,
61+
private importSettingService: QbdDirectImportSettingsService
5562
) { }
5663

5764
private getDestinationField(workspaceGeneralSetting: QbdDirectExportSettingGet, mappingSettings: MappingSetting[]): string {
@@ -64,23 +71,49 @@ export class QbdDirectBaseMappingComponent implements OnInit {
6471
return mappingSettings.find((setting) => setting.source_field === this.sourceField)?.destination_field || '';
6572
}
6673

74+
destinationOptionsWatcher(detailAccountType?: string[]): void {
75+
this.mappingService.getPaginatedDestinationAttributes(this.destinationField, undefined, this.displayName, '', detailAccountType).subscribe((responses) => {
76+
this.destinationOptions = responses.results as QbdDirectDestinationAttribute[];
77+
this.isLoading = false;
78+
});
79+
}
80+
81+
getCCCAccountOptions(): void {
82+
if (this.cccExpenseObject === QBDCorporateCreditCardExpensesObject.CREDIT_CARD_PURCHASE) {
83+
this.destinationOptionsWatcher(['CreditCard']);
84+
} else if (this.cccExpenseObject === QBDCorporateCreditCardExpensesObject.JOURNAL_ENTRY && this.employeeFieldMapping === FyleField.EMPLOYEE && this.nameInJE === NameInJournalEntry.EMPLOYEE) {
85+
this.destinationOptionsWatcher(['Bank', 'CreditCard', 'OtherCurrentLiability', 'LongTermLiability']);
86+
} else {
87+
this.destinationOptionsWatcher(['Bank', 'AccountsPayable', 'CreditCard', 'OtherCurrentLiability', 'LongTermLiability']);
88+
}
89+
}
90+
91+
getAccountOptions(): void {
92+
this.destinationOptionsWatcher(this.chartOfAccounts);
93+
}
94+
6795
private setupPage(): void {
6896
this.sourceField = decodeURIComponent(this.route.snapshot.params.source_field.toUpperCase());
6997
forkJoin([
70-
this.expoerSettingService.getQbdExportSettings(),
98+
this.exportSettingService.getQbdExportSettings(),
99+
this.importSettingService.getImportSettings(),
71100
this.mappingService.getMappingSettings()
72101
]).subscribe((responses) => {
73102
this.reimbursableExpenseObject = responses[0].reimbursable_expense_export_type;
74103
this.cccExpenseObject = responses[0].credit_card_expense_export_type;
75104
this.employeeFieldMapping = (responses[0].employee_field_mapping as unknown as FyleField);
76-
77-
this.destinationField = this.getDestinationField(responses[0], responses[1].results);
78-
79-
80-
this.mappingService.getPaginatedDestinationAttributes(this.destinationField, undefined, this.displayName).subscribe((responses) => {
81-
this.destinationOptions = responses.results;
82-
this.isLoading = false;
83-
});
105+
this.nameInJE = responses[0].name_in_journal_entry;
106+
this.chartOfAccounts = responses[1].import_settings.chart_of_accounts;
107+
108+
this.destinationField = this.getDestinationField(responses[0], responses[2].results);
109+
110+
if (this.sourceField === 'CORPORATE_CARD') {
111+
this.getCCCAccountOptions();
112+
} else if (this.sourceField === 'CATEGORY') {
113+
this.getAccountOptions();
114+
} else {
115+
this.destinationOptionsWatcher();
116+
}
84117
});
85118
}
86119

src/app/integrations/qbd-direct/qbd-direct-shared/qbd-direct-export-settings/qbd-direct-export-settings.component.html

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
<div *ngIf="helperService.isFieldRequired(exportSettingsForm, 'defaultReimbursableAccountsPayableAccountName')">
5858
<app-configuration-select-field
5959
[form]="exportSettingsForm"
60-
[destinationAttributes]="destinationOptionsWatcher(['AccountsPayable'] , destinationAccounts)"
60+
[destinationAttributes]="reimbursableAccpuntOptions()"
6161
[destinationOptionKey]="QbdDirectExportSettingDestinationOptionKey.ACCOUNTS_PAYABLE"
6262
[isOptionSearchInProgress]="isOptionSearchInProgress"
6363
[isAdvanceSearchEnabled]="true"
@@ -156,6 +156,21 @@
156156
</app-configuration-select-field>
157157
</div>
158158

159+
<div *ngIf="brandingFeatureConfig.featureFlags.exportSettings.nameInJournalEntry && exportSettingsForm.value.creditCardExportType === QBDCorporateCreditCardExpensesObject.JOURNAL_ENTRY">
160+
<app-configuration-select-field
161+
[form]="exportSettingsForm"
162+
[isFieldMandatory]="true"
163+
[showClearIcon]="true"
164+
[mandatoryErrorListName]="'Name in which Journal Entry should export'"
165+
[label]="brandingContent.corporateCard.creditCardExpenseNameinJELabel"
166+
[subLabel]="brandingContent.corporateCard.creditCardExpenseNameinJESubLabel"
167+
[options]="nameInJEOptions"
168+
[iconPath]="'list'"
169+
[placeholder]="'Select a name'"
170+
[formControllerName]="'nameInJE'">
171+
</app-configuration-select-field>
172+
</div>
173+
159174
<div *ngIf="exportSettingsForm.get('creditCardExportType')?.value && helperService.isFieldRequired(exportSettingsForm, 'defaultCreditCardAccountName')">
160175
<app-configuration-select-field
161176
[form]="exportSettingsForm"
@@ -196,20 +211,6 @@
196211
</app-configuration-select-field>
197212
</div>
198213

199-
<div *ngIf="brandingFeatureConfig.featureFlags.exportSettings.nameInJournalEntry && exportSettingsForm.value.creditCardExportType === QBDCorporateCreditCardExpensesObject.JOURNAL_ENTRY">
200-
<app-configuration-select-field
201-
[form]="exportSettingsForm"
202-
[isFieldMandatory]="true"
203-
[showClearIcon]="true"
204-
[mandatoryErrorListName]="'Name in which Journal Entry should export'"
205-
[label]="brandingContent.corporateCard.creditCardExpenseNameinJELabel"
206-
[subLabel]="brandingContent.corporateCard.creditCardExpenseNameinJESubLabel"
207-
[options]="nameInJEOptions"
208-
[iconPath]="'list'"
209-
[placeholder]="'Select a name'"
210-
[formControllerName]="'nameInJE'">
211-
</app-configuration-select-field>
212-
</div>
213214
</div>
214215
</div>
215216

@@ -238,7 +239,7 @@
238239
[iconPath]="'question-square-outline'"
239240
[placeholder]="'Select expense grouping'"
240241
[isDisableTextRequired]="true"
241-
[isDisabled]="exportSettingsForm.get('creditCardExportType')?.value === QBDCorporateCreditCardExpensesObject.CREDIT_CARD_PURCHASE ? true : false"
242+
[isDisabled]="exportSettingsForm.get('creditCardExportType')?.value === QBDCorporateCreditCardExpensesObject.CREDIT_CARD_PURCHASE || exportSettingsForm.get('creditCardExportType')?.value === QBDCorporateCreditCardExpensesObject.JOURNAL_ENTRY ? true : false"
242243
[formControllerName]="'creditCardExportGroup'">
243244
</app-configuration-select-field>
244245
</div>

src/app/integrations/qbd-direct/qbd-direct-shared/qbd-direct-export-settings/qbd-direct-export-settings.component.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,18 @@ export class QbdDirectExportSettingsComponent implements OnInit{
101101
return true;
102102
}
103103

104+
reimbursableAccpuntOptions(): DestinationAttribute[] {
105+
if (this.exportSettingsForm.controls.employeeMapping.value === EmployeeFieldMapping.EMPLOYEE) {
106+
return this.destinationOptionsWatcher(['Bank', 'CreditCard', 'OtherCurrentLiability', 'LongTermLiability'], this.destinationAccounts);
107+
}
108+
return this.destinationOptionsWatcher(['Bank', 'AccountsPayable', 'CreditCard', 'OtherCurrentLiability', 'LongTermLiability'], this.destinationAccounts);
109+
}
110+
104111
cccAccpuntOptions(cccExportType: string): DestinationAttribute[] {
105112
if (cccExportType === QBDCorporateCreditCardExpensesObject.CREDIT_CARD_PURCHASE) {
106113
return this.destinationOptionsWatcher(['CreditCard'], this.destinationAccounts);
114+
} else if (cccExportType === QBDCorporateCreditCardExpensesObject.JOURNAL_ENTRY && this.exportSettingsForm.controls.employeeMapping.value === EmployeeFieldMapping.EMPLOYEE && this.exportSettingsForm.controls.nameInJE.value === EmployeeFieldMapping.EMPLOYEE) {
115+
return this.destinationOptionsWatcher(['Bank', 'CreditCard', 'OtherCurrentLiability', 'LongTermLiability'], this.destinationAccounts);
107116
}
108117
return this.destinationOptionsWatcher(['Bank', 'AccountsPayable', 'CreditCard', 'OtherCurrentLiability', 'LongTermLiability'], this.destinationAccounts);
109118
}
@@ -173,14 +182,9 @@ export class QbdDirectExportSettingsComponent implements OnInit{
173182

174183
cccExportTypeWatcher(): void {
175184
this.exportSettingsForm.controls.creditCardExportType.valueChanges.subscribe((creditCardExportTypeValue) => {
176-
if (creditCardExportTypeValue === QBDCorporateCreditCardExpensesObject.CREDIT_CARD_PURCHASE) {
177185
this.exportSettingsForm.controls.creditCardExportGroup.patchValue(this.creditCardExpenseGroupingFieldOptions[1].value);
178186
this.exportSettingsForm.controls.creditCardExportGroup.disable();
179187
this.creditCardExpenseGroupingFieldOptions = [QbdDirectExportSettingModel.expenseGroupingFieldOptions()[1]];
180-
} else {
181-
this.exportSettingsForm.controls.creditCardExportGroup.enable();
182-
this.creditCardExpenseGroupingFieldOptions = QbdDirectExportSettingModel.expenseGroupingFieldOptions();
183-
}
184188
});
185189
}
186190

0 commit comments

Comments
 (0)