Skip to content

Commit

Permalink
qbo prepend code import settings page changes (#923)
Browse files Browse the repository at this point in the history
  • Loading branch information
DhaaraniCIT committed Sep 2, 2024
1 parent 051f8c3 commit cc816b4
Show file tree
Hide file tree
Showing 28 changed files with 343 additions and 118 deletions.
3 changes: 2 additions & 1 deletion src/app/branding/c1-branding-config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ export const c1FeatureConfig: FeatureConfiguration[string] = {
importItems: true,
importProjects: true,
allowCustomSegment: false,
dependentField: true
dependentField: true,
allowImportCode: false
},
advancedSettings: {
autoCreateVendors: false,
Expand Down
3 changes: 2 additions & 1 deletion src/app/branding/fyle-branding-config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ export const fyleFeatureConfig: FeatureConfiguration[string] = {
importItems: true,
importProjects: true,
allowCustomSegment: true,
dependentField: true
dependentField: true,
allowImportCode: true
},
advancedSettings: {
autoCreateVendors: true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ export type FeatureConfiguration = {
importProjects: boolean;
allowCustomSegment: boolean;
dependentField: boolean;
allowImportCode: boolean;
},
advancedSettings: {
autoCreateVendors: boolean;
Expand Down
13 changes: 9 additions & 4 deletions src/app/core/models/common/import-settings.model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,16 @@ export class ImportSettingsModel {
});
}

static getImportCodeField(importCodeFields: string[], destinationField: string): boolean {
return importCodeFields.includes(destinationField);
static getImportCodeField(importCodeFields: string[], destinationField: string, importCodeFieldCodeConfig: ImportCodeFieldConfigType): boolean | null {
if (importCodeFields?.includes(destinationField)) {
return importCodeFields?.includes(destinationField);
} else if (!importCodeFieldCodeConfig[destinationField]) {
return false;
}
return null;
}

static constructFormArray(importSettingsMappingSettings: ImportSettingMappingRow[], accountingAppFields: IntegrationField[], isDestinationFixedImport: boolean = true, importCodeFields: string[] | [] = []): FormGroup[] {
static constructFormArray(importSettingsMappingSettings: ImportSettingMappingRow[], accountingAppFields: IntegrationField[], importCodeFieldCodeConfig?: ImportCodeFieldConfigType, isDestinationFixedImport: boolean = true, importCodeFields: string[] | [] = []): FormGroup[] {
const expenseFieldFormArray: FormGroup[] = [];
const mappedFieldMap = new Map<string, any>();
const unmappedFieldMap = new Map<string, any>();
Expand All @@ -87,7 +92,7 @@ export class ImportSettingsModel {
import_code: null
};
if (mappingSetting) {
fieldData.import_code = fieldData.import_to_fyle ? this.getImportCodeField(importCodeFields, accountingAppField.attribute_type) : null;
fieldData.import_code = importCodeFieldCodeConfig ? this.getImportCodeField(importCodeFields, accountingAppField.attribute_type, importCodeFieldCodeConfig) : null;
mappedFieldMap.set(accountingAppField.attribute_type, fieldData);
} else {
unmappedFieldMap.set(accountingAppField.attribute_type, fieldData);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import { FormArray, FormControl, FormGroup } from "@angular/forms";
import { ImportSettingMappingRow, ImportSettingsModel } from "../../common/import-settings.model";
import { ImportCodeFieldConfigType, ImportSettingMappingRow, ImportSettingsModel } from "../../common/import-settings.model";
import { DefaultDestinationAttribute } from "../../db/destination-attribute.model";
import { MappingSetting } from "../../db/mapping-setting.model";
import { IntegrationField } from "../../db/mapping.model";
import { QBOField } from "../../enum/enum.model";

export type QBOImportSettingWorkspaceGeneralSetting = {
import_categories: boolean,
import_items: boolean,
import_vendors_as_merchants: boolean,
charts_of_accounts: string[],
import_tax_codes: boolean
import_tax_codes: boolean,
import_code_fields?: string[]
}

export type QBOImportSettingGeneralMapping = {
Expand Down Expand Up @@ -41,8 +41,9 @@ export class QBOImportSettingModel extends ImportSettingsModel {
];
}

static mapAPIResponseToFormGroup(importSettings: QBOImportSettingGet | null, qboFields: IntegrationField[]): FormGroup {
const expenseFieldsArray = importSettings?.mapping_settings ? this.constructFormArray(importSettings.mapping_settings, qboFields) : [];
static mapAPIResponseToFormGroup(importSettings: QBOImportSettingGet | null, qboFields: IntegrationField[], qboImportCodeFieldCodeConfig: ImportCodeFieldConfigType): FormGroup {
const importCode = importSettings?.workspace_general_settings?.import_code_fields ? importSettings?.workspace_general_settings?.import_code_fields : [];
const expenseFieldsArray = importSettings?.mapping_settings ? this.constructFormArray(importSettings.mapping_settings, qboFields, qboImportCodeFieldCodeConfig) : [];
return new FormGroup({
importCategories: new FormControl(importSettings?.workspace_general_settings.import_categories ?? false),
expenseFields: new FormArray(expenseFieldsArray),
Expand All @@ -51,7 +52,10 @@ export class QBOImportSettingModel extends ImportSettingsModel {
taxCode: new FormControl(importSettings?.workspace_general_settings.import_tax_codes ?? false),
importVendorsAsMerchants: new FormControl(importSettings?.workspace_general_settings.import_vendors_as_merchants ?? false),
defaultTaxCode: new FormControl(importSettings?.general_mappings?.default_tax_code?.id ? importSettings.general_mappings.default_tax_code : null),
searchOption: new FormControl('')
searchOption: new FormControl(''),
importCodeFields: new FormControl( importSettings?.workspace_general_settings?.import_code_fields ? importSettings.workspace_general_settings.import_code_fields : null),
// ImportCategoryCode: new FormControl(this.getImportCodeField(importCode, 'ACCOUNT', qboImportCodeFieldCodeConfig))
importCategoryCode: new FormControl(null)
});
}

Expand All @@ -67,6 +71,7 @@ export class QBOImportSettingModel extends ImportSettingsModel {
charts_of_accounts: importSettingsForm.get('chartOfAccountTypes')?.value,
import_tax_codes: importSettingsForm.get('taxCode')?.value,
import_vendors_as_merchants: importSettingsForm.get('importVendorsAsMerchants')?.value
// Import_code_fields: importSettingsForm.get('importCodeFields')?.value
},
mapping_settings: mappingSettings,
general_mappings: {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { FormArray, FormControl, FormGroup } from "@angular/forms";
import { ExpenseField, ImportSettingMappingRow, ImportSettingsCustomFieldRow, ImportSettingsModel } from "../../common/import-settings.model";
import { ExpenseField, ImportCodeFieldConfigType, ImportSettingMappingRow, ImportSettingsCustomFieldRow, ImportSettingsModel } from "../../common/import-settings.model";
import { IntegrationField } from "../../db/mapping.model";

export type Sage300DefaultFields = {
Expand Down Expand Up @@ -52,15 +52,15 @@ export class Sage300ImportSettingModel extends ImportSettingsModel {
};
}

static mapAPIResponseToFormGroup(importSettings: Sage300ImportSettingGet | null, sage300Fields: IntegrationField[]): FormGroup {
static mapAPIResponseToFormGroup(importSettings: Sage300ImportSettingGet | null, sage300Fields: IntegrationField[], importCodeFieldConfig: ImportCodeFieldConfigType): FormGroup {
const importCode = importSettings?.import_settings?.import_code_fields ? importSettings?.import_settings?.import_code_fields : [];
const expenseFieldsArray = importSettings?.mapping_settings ? this.constructFormArray(importSettings.mapping_settings, sage300Fields, false, importCode) : [] ;
const expenseFieldsArray = importSettings?.mapping_settings ? this.constructFormArray(importSettings.mapping_settings, sage300Fields, importCodeFieldConfig, false, importCode) : [] ;
return new FormGroup({
importCodeFields: new FormControl(importSettings?.import_settings?.import_code_fields ? importSettings?.import_settings.import_code_fields : []),
importCategories: new FormControl(importSettings?.import_settings?.import_categories ?? false),
importCategoryCode: new FormControl(importSettings?.import_settings?.import_categories ? this.getImportCodeField(importCode, 'ACCOUNT') : null),
importCategoryCode: new FormControl(this.getImportCodeField(importCode, 'ACCOUNT', importCodeFieldConfig)),
importVendorAsMerchant: new FormControl(importSettings?.import_settings?.import_vendors_as_merchants ?? false),
importVendorCode: new FormControl(importSettings?.import_settings?.import_vendors_as_merchants ? this.getImportCodeField(importCode, 'VENDOR') : null),
importVendorCode: new FormControl(this.getImportCodeField(importCode, 'VENDOR', importCodeFieldConfig)),
expenseFields: new FormArray(expenseFieldsArray),
isDependentImportEnabled: new FormControl(importSettings?.dependent_field_settings?.is_import_enabled ? importSettings.dependent_field_settings.is_import_enabled : false),
costCodes: new FormControl(importSettings?.dependent_field_settings?.cost_code_field_name ? this.generateDependentFieldValue(importSettings.dependent_field_settings.cost_code_field_name, importSettings.dependent_field_settings.cost_code_placeholder) : null),
Expand Down
2 changes: 1 addition & 1 deletion src/app/core/services/common/mapping.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ export class MappingService {
};

if (value) {
if (appName === AppName.SAGE300) {
if (appName && ([AppName.SAGE300] as string[]).includes(appName)) {
params.value = value;
} else {
params.value__icontains = value;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,9 @@ export class QboImportSettingsService {
getQBOFields(): Observable<IntegrationField[]> {
return this.apiService.get(`/workspaces/${this.workspaceId}/qbo/fields/`, {});
}

getImportCodeFieldConfig() {
const workspaceId = this.workspaceService.getWorkspaceId();
return this.apiService.get(`/v2/workspaces/${workspaceId}/import_settings/import_code_fields_config/`, {});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { AccountingExportService } from 'src/app/core/services/common/accounting
import { DashboardService } from 'src/app/core/services/common/dashboard.service';
import { WorkspaceService } from 'src/app/core/services/common/workspace.service';
import { QboExportSettingsService } from 'src/app/core/services/qbo/qbo-configuration/qbo-export-settings.service';
import { QboImportSettingsService } from 'src/app/core/services/qbo/qbo-configuration/qbo-import-settings.service';

@Component({
selector: 'app-qbo-dashboard',
Expand Down Expand Up @@ -67,11 +68,14 @@ export class QboDashboardComponent implements OnInit {

readonly brandingConfig = brandingConfig;

importCodeFields: any;

constructor(
private accountingExportService: AccountingExportService,
private dashboardService: DashboardService,
private qboExportSettingsService: QboExportSettingsService,
private workspaceService: WorkspaceService
private workspaceService: WorkspaceService,
private importSettingService: QboImportSettingsService
) { }

export() {
Expand Down Expand Up @@ -123,7 +127,8 @@ export class QboDashboardComponent implements OnInit {
this.dashboardService.getAllTasks([TaskLogState.ENQUEUED, TaskLogState.IN_PROGRESS, TaskLogState.FAILED], undefined, this.accountingExportType),
this.workspaceService.getWorkspaceGeneralSettings(),
this.dashboardService.getExportableAccountingExportIds('v1'),
this.qboExportSettingsService.getExportSettings()
this.qboExportSettingsService.getExportSettings(),
this.importSettingService.getImportSettings()
]).subscribe((responses) => {
this.errors = DashboardModel.parseAPIResponseToGroupedError(responses[0]);
this.isImportItemsEnabled = responses[3].import_items;
Expand All @@ -137,6 +142,8 @@ export class QboDashboardComponent implements OnInit {

this.isLoading = false;

this.importCodeFields = responses[6].workspace_general_settings?.import_code_fields;

const queuedTasks: QBOTaskLog[] = responses[2].results.filter((task: QBOTaskLog) => task.status === TaskLogState.ENQUEUED || task.status === TaskLogState.IN_PROGRESS);
this.failedExpenseGroupCount = responses[2].results.filter((task: QBOTaskLog) => task.status === TaskLogState.FAILED || task.status === TaskLogState.FATAL).length;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { QBOWorkspaceGeneralSetting } from 'src/app/core/models/qbo/db/workspace
import { IntegrationsToastService } from 'src/app/core/services/common/integrations-toast.service';
import { MappingService } from 'src/app/core/services/common/mapping.service';
import { WorkspaceService } from 'src/app/core/services/common/workspace.service';
import { QboImportSettingsService } from 'src/app/core/services/qbo/qbo-configuration/qbo-import-settings.service';

@Component({
selector: 'app-qbo-base-mapping',
Expand Down Expand Up @@ -38,11 +39,14 @@ export class QboBaseMappingComponent implements OnInit {

displayName: string | undefined = undefined;

isMultiLineOption: boolean;

constructor(
private route: ActivatedRoute,
private mappingService: MappingService,
private toastService: IntegrationsToastService,
private workspaceService: WorkspaceService
private workspaceService: WorkspaceService,
private importSettingsService: QboImportSettingsService
) { }

triggerAutoMapEmployees(): void {
Expand Down Expand Up @@ -70,7 +74,8 @@ export class QboBaseMappingComponent implements OnInit {
this.sourceField = decodeURIComponent(this.route.snapshot.params.source_field.toUpperCase());
forkJoin([
this.workspaceService.getWorkspaceGeneralSettings(),
this.mappingService.getMappingSettings()
this.mappingService.getMappingSettings(),
this.importSettingsService.getImportSettings()
]).subscribe((responses) => {
this.reimbursableExpenseObject = responses[0].reimbursable_expenses_object;
this.cccExpenseObject = responses[0].corporate_credit_card_expenses_object;
Expand All @@ -79,6 +84,8 @@ export class QboBaseMappingComponent implements OnInit {

this.destinationField = this.getDestinationField(responses[0], responses[1].results);

// This.isMultiLineOption = responses[2].workspace_general_settings.import_code_fields?.includes(this.destinationField);

if (this.destinationField === AccountingField.ACCOUNT) {
this.displayName = responses[0].import_items ? `${AccountingDisplayName.ITEM},${AccountingDisplayName.ACCOUNT}` : AccountingDisplayName.ACCOUNT;
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,19 @@
[tooltipText]="'By default expense will be selected. Open the dropdown to select more as per your requirements'">
</app-clone-setting-field>
</div>
<!-- <div class="clone-setting--dependent-field" *ngIf="brandingFeatureConfig.featureFlags.importSettings.allowImportCode && importSettingForm.value.importCategories && qboImportCodeFieldCodeConfig[DefaultImportFields.ACCOUNT]">
<app-clone-setting-field
[form]="importSettingForm"
[options]="importCodeSelectorOptions[DefaultImportFields.ACCOUNT]"
[placeholder]="'Select how to import ' + helperService.sentenseCaseConversion(DefaultImportFields.ACCOUNT).toLowerCase()"
[label]="'How to import the '+ helperService.sentenseCaseConversion(DefaultImportFields.ACCOUNT).toLowerCase() +'s from ' + appName + '?'"
[tooltipText]="'You have the option to import either just the names of your '+ helperService.sentenseCaseConversion(DefaultImportFields.ACCOUNT).toLowerCase() +'s or both the names and codes.'"
[isMultiLineOption]="true"
[isFieldMandatory]="true"
[dropdownDisplayKey]="'label'"
[formControllerName]="'importCategoryCode'">
</app-clone-setting-field>
</div> -->
</div>

<div class="clone-setting--field" *ngIf="cloneSetting.export_settings.workspace_general_settings.reimbursable_expenses_object !== QBOReimbursableExpensesObject.JOURNAL_ENTRY && cloneSetting.export_settings.workspace_general_settings.corporate_credit_card_expenses_object !== QBOCorporateCreditCardExpensesObject.JOURNAL_ENTRY">
Expand Down
Loading

0 comments on commit cc816b4

Please sign in to comment.