diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts index fde4f20fa..d8b77524b 100644 --- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts +++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts @@ -52,6 +52,18 @@ import { DataService } from '../../../../services/data.service'; import { validateObjectForForm } from '../../../../util/form.util'; import { CreateOrUpdateActivityDialogParams } from './interfaces/interfaces'; +const DisplayedActivityType = { + BUY: Type.BUY, + DIVIDEND: Type.DIVIDEND, + FEE: Type.FEE, + INTEREST: Type.INTEREST, + LIABILITY: Type.LIABILITY, + SELL: Type.SELL, + VALUABLE: 'VALUABLE' as const +}; +type DisplayedActivityType = + (typeof DisplayedActivityType)[keyof typeof DisplayedActivityType]; + @Component({ changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'h-100' }, @@ -178,8 +190,10 @@ export class GfCreateOrUpdateActivityDialog implements OnDestroy { }; }) ?? []; - Object.keys(Type).forEach((type) => { - this.typesTranslationMap[Type[type]] = translate(Type[type]); + Object.keys(DisplayedActivityType).forEach((type) => { + this.typesTranslationMap[DisplayedActivityType[type]] = translate( + DisplayedActivityType[type] + ); }); this.activityForm = this.formBuilder.group({ @@ -242,7 +256,9 @@ export class GfCreateOrUpdateActivityDialog implements OnDestroy { ) .subscribe(async () => { if ( - ['BUY', 'FEE', 'ITEM'].includes(this.activityForm.get('type').value) + ['BUY', 'FEE', 'VALUABLE'].includes( + this.activityForm.get('type').value + ) ) { this.total = this.activityForm.get('quantity').value * @@ -261,7 +277,7 @@ export class GfCreateOrUpdateActivityDialog implements OnDestroy { this.activityForm.get('accountId').valueChanges.subscribe((accountId) => { const type = this.activityForm.get('type').value; - if (['FEE', 'INTEREST', 'ITEM', 'LIABILITY'].includes(type)) { + if (['FEE', 'INTEREST', 'VALUABLE', 'LIABILITY'].includes(type)) { const currency = this.data.accounts.find(({ id }) => { return id === accountId; @@ -357,9 +373,9 @@ export class GfCreateOrUpdateActivityDialog implements OnDestroy { this.activityForm .get('type') .valueChanges.pipe(takeUntil(this.unsubscribeSubject)) - .subscribe((type: Type) => { + .subscribe((type: DisplayedActivityType) => { if ( - type === 'ITEM' || + type === 'VALUABLE' || (this.activityForm.get('dataSource').value === 'MANUAL' && type === 'BUY') ) { @@ -384,7 +400,7 @@ export class GfCreateOrUpdateActivityDialog implements OnDestroy { this.activityForm.get('name').setValidators(Validators.required); this.activityForm.get('name').updateValueAndValidity(); - if (type === 'ITEM') { + if (type === 'VALUABLE') { this.activityForm.get('quantity').setValue(1); } @@ -513,11 +529,14 @@ export class GfCreateOrUpdateActivityDialog implements OnDestroy { currency: this.activityForm.get('currency').value, customCurrency: this.activityForm.get('currencyOfUnitPrice').value, date: this.activityForm.get('date').value, - dataSource: this.activityForm.get('dataSource').value, + dataSource: + this.activityForm.get('type').value === 'VALUABLE' + ? 'MANUAL' + : this.activityForm.get('dataSource').value, fee: this.activityForm.get('fee').value, quantity: this.activityForm.get('quantity').value, symbol: - (['FEE', 'INTEREST', 'ITEM', 'LIABILITY'].includes( + (['FEE', 'INTEREST', 'VALUABLE', 'LIABILITY'].includes( this.activityForm.get('type').value ) ? undefined @@ -526,7 +545,10 @@ export class GfCreateOrUpdateActivityDialog implements OnDestroy { tags: this.activityForm.get('tags').value?.map(({ id }) => { return id; }), - type: this.activityForm.get('type').value, + type: + this.activityForm.get('type').value === 'VALUABLE' + ? 'BUY' + : this.activityForm.get('type').value, unitPrice: this.activityForm.get('unitPrice').value }; @@ -543,12 +565,6 @@ export class GfCreateOrUpdateActivityDialog implements OnDestroy { object: activity }); - if (activity.type === 'ITEM') { - // Transform deprecated type ITEM - activity.dataSource = 'MANUAL'; - activity.type = 'BUY'; - } - this.dialogRef.close(activity); } else { (activity as UpdateOrderDto).id = this.data.activity?.id; @@ -560,12 +576,6 @@ export class GfCreateOrUpdateActivityDialog implements OnDestroy { object: activity as UpdateOrderDto }); - if (activity.type === 'ITEM') { - // Transform deprecated type ITEM - activity.dataSource = 'MANUAL'; - activity.type = 'BUY'; - } - this.dialogRef.close(activity as UpdateOrderDto); } } catch (error) { diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html index d7f466743..4cd74af73 100644 --- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html +++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -65,9 +65,9 @@ >Stocks, ETFs, bonds, cryptocurrencies, commodities - + {{ typesTranslationMap['ITEM'] }}{{ typesTranslationMap['VALUABLE'] }} Luxury items, real estate, private companies