Skip to content

Commit c2da432

Browse files
DhaaraniCITruuushhh
authored andcommitted
memo field fix (#833)
* memo field fix * default field fix
1 parent d7d1479 commit c2da432

File tree

13 files changed

+76
-19
lines changed

13 files changed

+76
-19
lines changed

src/app/core/models/common/advanced-settings.model.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ export class AdvancedSettingsModel {
7272
return ['employee_email', 'merchant', 'purpose', 'category', 'spent_on', 'report_number', 'expense_link'];
7373
}
7474

75-
static formatMemoPreview(memoStructure: string[], defaultMemoOptions: string[]): string {
75+
static formatMemoPreview(memoStructure: string[], defaultMemoOptions: string[]): [string, string[]] {
7676
const time = Date.now();
7777
const today = new Date(time);
7878

@@ -87,19 +87,22 @@ export class AdvancedSettingsModel {
8787
};
8888
let memoPreviewText = '';
8989
const memo: string[] = [];
90+
const originMemo: string[] = [];
9091
memoStructure.forEach((field, index) => {
9192
if (field in previewValues) {
9293
const defaultIndex = defaultMemoOptions.indexOf(memoStructure[index]);
9394
memo[defaultIndex] = previewValues[field];
95+
originMemo[defaultIndex] = field;
9496
}
9597
});
98+
memoStructure = originMemo.filter(item => item.trim() !== '');
9699
memo.forEach((field, index) => {
97100
memoPreviewText += field;
98101
if (index + 1 !== memo.length) {
99102
memoPreviewText = memoPreviewText + ' - ';
100103
}
101104
});
102-
return memoPreviewText;
105+
return [memoPreviewText, memoStructure];
103106
}
104107

105108
static filterAdminEmails = (emailToSearch: string[], adminEmails: EmailOption[]) => {

src/app/core/models/netsuite/netsuite-configuration/netsuite-advanced-settings.model.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { NetsuiteDefaultLevelOptions, NetsuitePaymentSyncDirection, QBOPaymentSy
55
import { AdvancedSettingValidatorRule, AdvancedSettingsModel } from "../../common/advanced-settings.model";
66
import { HelperUtility } from "../../common/helper.model";
77
import { brandingConfig } from "src/app/branding/branding-config";
8+
import { environment } from "src/environments/environment";
89

910

1011
export type NetsuiteAdvancedSettingConfiguration = {
@@ -65,7 +66,7 @@ export type NetsuiteAdvancedSettingAddEmailModel = {
6566

6667
export class NetsuiteAdvancedSettingModel extends HelperUtility {
6768
static getDefaultMemoOptions(): string[] {
68-
return ['employee_email', 'purpose', 'category', 'spent_on', 'report_number'];
69+
return ['employee_email', 'merchant', 'purpose', 'category', 'spent_on', 'report_number'];
6970
}
7071

7172
static getPaymentSyncOptions(): SelectFormOption[] {

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@
6161
[options]="defaultMemoOptions"
6262
[iconPath]="'list'"
6363
[placeholder]="'Set description'"
64-
[formControllerName]="'memoStructure'">
64+
[formControllerName]="'memoStructure'"
65+
(changeInMultiSelect)="onMultiSelectChange()">
6566
</app-configuration-multi-select>
6667
<div class="preview-text">
6768
<h4 class="tw-text-form-label-text-color tw-mb-12-px">Preview of the Description Field</h4>

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

+10-2
Original file line numberDiff line numberDiff line change
@@ -98,12 +98,20 @@ export class BusinessCentralAdvancedSettingsComponent implements OnInit {
9898
this.helper.handleSkipExportFormInAdvancedSettingsUpdates(this.skipExportForm, formWatcher, this.advancedSettingForm);
9999
}
100100

101+
onMultiSelectChange() {
102+
const memo = this.advancedSettingForm.controls.memoStructure.value;
103+
const changedMemo = AdvancedSettingsModel.formatMemoPreview(memo, this.defaultMemoOptions)[1];
104+
this.advancedSettingForm.controls.memoStructure.patchValue(changedMemo);
105+
}
106+
101107
private createMemoStructureWatcher(): void {
102108
this.memoStructure = this.advancedSettingForm.value.memoStructure;
103-
this.memoPreviewText = AdvancedSettingsModel.formatMemoPreview(this.memoStructure, this.defaultMemoOptions);
109+
const memo = AdvancedSettingsModel.formatMemoPreview(this.memoStructure, this.defaultMemoOptions);
110+
this.memoPreviewText = memo[0];
111+
this.advancedSettingForm.controls.memoStructure.patchValue(memo[1]);
104112
this.advancedSettingForm.controls.memoStructure.valueChanges.subscribe((memoChanges) => {
105113
this.memoStructure = memoChanges;
106-
this.memoPreviewText = AdvancedSettingsModel.formatMemoPreview(this.memoStructure, this.defaultMemoOptions);
114+
this.memoPreviewText = AdvancedSettingsModel.formatMemoPreview(this.memoStructure, this.defaultMemoOptions)[0];
107115
});
108116
}
109117

src/app/integrations/netsuite/netsuite-shared/netsuite-advanced-settings/netsuite-advanced-settings.component.html

+2-1
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,8 @@
121121
[options]="defaultMemoOptions"
122122
[iconPath]="'list'"
123123
[placeholder]="'Set description'"
124-
[formControllerName]="'memoStructure'">
124+
[formControllerName]="'memoStructure'"
125+
(changeInMultiSelect)="onMultiSelectChange()">
125126
</app-configuration-multi-select>
126127
<div class="preview-text">
127128
<h4 class="tw-text-form-label-text-color tw-mb-12-px">{{brandingContent.previewDescriptionFieldLabel}}</h4>

src/app/integrations/netsuite/netsuite-shared/netsuite-advanced-settings/netsuite-advanced-settings.component.ts

+10-2
Original file line numberDiff line numberDiff line change
@@ -194,11 +194,19 @@ export class NetsuiteAdvancedSettingsComponent implements OnInit {
194194
return this.workspaceGeneralSettings.reimbursable_expenses_object && this.workspaceGeneralSettings.reimbursable_expenses_object !== NetsuiteReimbursableExpensesObject.JOURNAL_ENTRY;
195195
}
196196

197+
onMultiSelectChange() {
198+
const memo = this.advancedSettingForm.controls.memoStructure.value;
199+
const changedMemo = AdvancedSettingsModel.formatMemoPreview(memo, this.defaultMemoOptions)[1];
200+
this.advancedSettingForm.controls.memoStructure.patchValue(changedMemo);
201+
}
202+
197203
private createMemoStructureWatcher(): void {
198204
this.memoStructure = this.advancedSetting.configuration.memo_structure;
199-
this.memoPreviewText = AdvancedSettingsModel.formatMemoPreview(this.memoStructure, this.defaultMemoOptions);
205+
const memo: [string, string[]] = AdvancedSettingsModel.formatMemoPreview(this.memoStructure, this.defaultMemoOptions);
206+
this.memoPreviewText = memo[0];
207+
this.advancedSettingForm.controls.memoStructure.patchValue(memo[1]);
200208
this.advancedSettingForm.controls.memoStructure.valueChanges.subscribe((memoChanges) => {
201-
this.memoPreviewText = AdvancedSettingsModel.formatMemoPreview(memoChanges, this.defaultMemoOptions);
209+
this.memoPreviewText = AdvancedSettingsModel.formatMemoPreview(memoChanges, this.defaultMemoOptions)[0];
202210
});
203211
}
204212

src/app/integrations/qbo/qbo-onboarding/qbo-clone-settings/qbo-clone-settings.component.html

+2-1
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,8 @@
495495
[iconPath]="'list'"
496496
[placeholder]="'Set description'"
497497
[formControllerName]="'memoStructure'"
498-
[isCloneSettingView]="true">
498+
[isCloneSettingView]="true"
499+
(changeInMultiSelect)="onMultiSelectChange()">
499500
</app-configuration-multi-select>
500501
</div>
501502
<div class="clone-setting--dependent-field tw-text-14-px tw-font-400 tw-text-text-muted !tw-pl-40-px">

src/app/integrations/qbo/qbo-onboarding/qbo-clone-settings/qbo-clone-settings.component.ts

+10-2
Original file line numberDiff line numberDiff line change
@@ -340,11 +340,19 @@ export class QboCloneSettingsComponent implements OnInit {
340340
});
341341
}
342342

343+
onMultiSelectChange() {
344+
const memo = this.advancedSettingForm.controls.memoStructure.value;
345+
const changedMemo = AdvancedSettingsModel.formatMemoPreview(memo, this.defaultMemoOptions)[1];
346+
this.advancedSettingForm.controls.memoStructure.patchValue(changedMemo);
347+
}
348+
343349
private createMemoStructureWatcher(): void {
344350
this.memoStructure = this.cloneSetting.advanced_configurations.workspace_general_settings.memo_structure;
345-
this.memoPreviewText = AdvancedSettingsModel.formatMemoPreview(this.memoStructure, this.defaultMemoOptions);
351+
const memo = AdvancedSettingsModel.formatMemoPreview(this.memoStructure, this.defaultMemoOptions);
352+
this.memoPreviewText = memo[0];
353+
this.advancedSettingForm.controls.memoStructure.patchValue(memo[1]);
346354
this.advancedSettingForm.controls.memoStructure.valueChanges.subscribe((memoChanges) => {
347-
this.memoPreviewText = AdvancedSettingsModel.formatMemoPreview(memoChanges, this.defaultMemoOptions);
355+
this.memoPreviewText = AdvancedSettingsModel.formatMemoPreview(memoChanges, this.defaultMemoOptions)[0];
348356
});
349357
}
350358

src/app/integrations/qbo/qbo-shared/qbo-advanced-settings/qbo-advanced-settings.component.html

+2-1
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,8 @@
126126
[options]="defaultMemoOptions"
127127
[iconPath]="'list'"
128128
[placeholder]="'Set description'"
129-
[formControllerName]="'memoStructure'">
129+
[formControllerName]="'memoStructure'"
130+
(changeInMultiSelect)="onMultiSelectChange()">
130131
</app-configuration-multi-select>
131132
<div class="preview-text">
132133
<h4 class="tw-text-form-label-text-color tw-mb-12-px">{{brandingContent.previewDescriptionFieldLabel}}</h4>

src/app/integrations/qbo/qbo-shared/qbo-advanced-settings/qbo-advanced-settings.component.ts

+12-3
Original file line numberDiff line numberDiff line change
@@ -170,14 +170,23 @@ export class QboAdvancedSettingsComponent implements OnInit {
170170
return !this.workspaceGeneralSettings.import_vendors_as_merchants && (this.workspaceGeneralSettings.corporate_credit_card_expenses_object === QBOCorporateCreditCardExpensesObject.CREDIT_CARD_PURCHASE || this.workspaceGeneralSettings.corporate_credit_card_expenses_object === QBOCorporateCreditCardExpensesObject.DEBIT_CARD_EXPENSE || this.workspaceGeneralSettings.name_in_journal_entry === NameInJournalEntry.MERCHANT);
171171
}
172172

173+
onMultiSelectChange() {
174+
const memo = this.advancedSettingForm.controls.memoStructure.value;
175+
const changedMemo = AdvancedSettingsModel.formatMemoPreview(memo, this.defaultMemoOptions)[1];
176+
this.advancedSettingForm.controls.memoStructure.patchValue(changedMemo);
177+
}
178+
173179
private createMemoStructureWatcher(): void {
174-
this.memoStructure = this.advancedSetting.workspace_general_settings.memo_structure;
175-
this.memoPreviewText = AdvancedSettingsModel.formatMemoPreview(this.memoStructure, this.defaultMemoOptions);
180+
this.memoStructure = this.advancedSettingForm.value.memoStructure;
181+
const memo = AdvancedSettingsModel.formatMemoPreview(this.memoStructure, this.defaultMemoOptions);
182+
this.memoPreviewText = memo[0];
183+
this.advancedSettingForm.controls.memoStructure.patchValue(memo[1]);
176184
this.advancedSettingForm.controls.memoStructure.valueChanges.subscribe((memoChanges) => {
177-
this.memoPreviewText = AdvancedSettingsModel.formatMemoPreview(memoChanges, this.defaultMemoOptions);
185+
this.memoPreviewText = AdvancedSettingsModel.formatMemoPreview(this.memoStructure, this.defaultMemoOptions)[0];
178186
});
179187
}
180188

189+
181190
skipExportWatcher(): void {
182191
const skipExportFormWatcherFields: SkipExportValidatorRule = {
183192
condition1: ['operator1', 'value1'],

src/app/shared/components/configuration/configuration-multi-select/configuration-multi-select.component.html

+4-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ <h5 class="!tw-text-text-muted tw-text-14-px !tw-font-400 !tw-leading-4" [innerH
99
</div>
1010
</div>
1111
<div class="tw-pl-34-px">
12-
<p-multiSelect [options]="options" styleClass="tw-z-2 tw-py-8-px tw-px-12-px" [formControlName]="formControllerName" [defaultLabel]="placeholder" [ngClass]="[form.controls[formControllerName].invalid && isFieldMandatory ? 'error-box' : 'normal-box']" [dropdownIcon]="'pi pi-chevron-down ' + brandingConfig.brandId">
12+
<p-multiSelect [options]="options" styleClass="tw-z-2 tw-py-8-px tw-px-12-px" [formControlName]="formControllerName" [defaultLabel]="placeholder"
13+
[ngClass]="[form.controls[formControllerName].invalid && isFieldMandatory ? 'error-box' : 'normal-box']"
14+
[dropdownIcon]="'pi pi-chevron-down ' + brandingConfig.brandId"
15+
(onChange)="onMultiSelectChange()">
1316
<ng-template let-value pTemplate="selectedItems" >
1417
<div *ngIf="form.value[formControllerName]?.length>0" class="tw-flex">
1518
<p *ngFor="let name of value;let i = index">{{ name | titlecase | snakeCaseToSpaceCase }}<span *ngIf="i !== value?.length-1">,&nbsp;</span></p>

src/app/shared/components/configuration/configuration-multi-select/configuration-multi-select.component.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Component, Input, OnInit } from '@angular/core';
1+
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
22
import { FormBuilder, FormGroup } from '@angular/forms';
33
import { brandingConfig } from 'src/app/branding/branding-config';
44

@@ -31,6 +31,8 @@ export class ConfigurationMultiSelectComponent implements OnInit {
3131

3232
@Input() isCloneSettingView: boolean;
3333

34+
@Output() changeInMultiSelect = new EventEmitter();
35+
3436
currentlyDragging: string | null;
3537

3638
selected: any[];
@@ -43,6 +45,10 @@ export class ConfigurationMultiSelectComponent implements OnInit {
4345
private formBuilder: FormBuilder
4446
) { }
4547

48+
onMultiSelectChange() {
49+
this.changeInMultiSelect.emit();
50+
}
51+
4652
// DragStart(memo: string) {
4753
// This.currentlyDragging = memo;
4854
// }

src/app/shared/components/configuration/configuration-select-field/configuration-select-field.component.html

+8-1
Original file line numberDiff line numberDiff line change
@@ -145,9 +145,16 @@ <h5 *ngIf="formControllerName === 'cccExportType' && brandingConfig.brandId ===
145145
<div class="tw-pt-2 defaultFields">
146146
<p-dropdown appendTo="body" [options]="destinationAttributes" optionLabel="name"
147147
[formControlName]="formControllerName" [placeholder]="placeholder" [ngClass]="{'selectedItem': form.controls[formControllerName].value, 'filterDropdown': !form.controls[formControllerName].value, 'showClearIcon': showClearIcon && !isDisabled && form.controls[formControllerName].value}">
148+
<ng-template let-option pTemplate="item">
149+
<div #textElement
150+
[ngStyle]="{'white-space': 'nowrap', 'overflow': 'hidden', 'text-overflow': 'ellipsis', 'max-width': '16rem'}"
151+
[pTooltip]="isOverflowing(textElement) ? option.name : null" tooltipPosition="top">
152+
{{ brandingConfig.brandId === 'co' ? (option.name | sentenceCase) : (option.name)}}
153+
</div>
154+
</ng-template>
148155
<ng-template pTemplate="selectedItem" let-item>
149156
<p>
150-
{{ item.name }}
157+
{{ brandingConfig.brandId === 'co' ? (item.name | sentenceCase) : (item.name)}}
151158
</p>
152159
<app-svg-icon *ngIf="showClearIcon && !isDisabled" [svgSource]="'cross-medium'" [c1SvgSource]="'grv-cross-filled-medium'" (click)="removeFilter(form.controls[formControllerName])" [height]="'18px'" [width]="'18px'" [styleClasses]="'tw-mt-4-px'"></app-svg-icon>
153160
</ng-template>

0 commit comments

Comments
 (0)