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 b32f08baa..b968251cb 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 @@ -148,6 +148,7 @@ export class CreateOrUpdateActivityDialog implements OnDestroy { ], updateAccountBalance: [false] }); + this.activityForm.valueChanges .pipe( // Slightly delay until the more specific form control value changes have @@ -156,23 +157,30 @@ export class CreateOrUpdateActivityDialog implements OnDestroy { takeUntil(this.unsubscribeSubject) ) .subscribe(async () => { - const activity = { quantity: this.activityForm.get('quantity').value }; - try { if (this.mode === 'create') { + const activity = this.getActivity() as CreateOrderDto; + await validateObjectForForm({ classDto: CreateOrderDto, form: this.activityForm, + ignoreFields: ['dataSource', 'date'], object: activity }); } else { + const activity = this.getActivity() as UpdateOrderDto; + await validateObjectForForm({ classDto: UpdateOrderDto, form: this.activityForm, + ignoreFields: ['dataSource', 'date'], object: activity }); } - } catch (error) {} + } catch (error) { + console.error(error); + } + let exchangeRateOfUnitPrice = 1; this.activityForm.get('feeInCustomCurrency').setErrors(null); @@ -480,31 +488,13 @@ export class CreateOrUpdateActivityDialog implements OnDestroy { } public async onSubmit() { - const activity: CreateOrderDto | UpdateOrderDto = { - accountId: this.activityForm.get('accountId').value, - assetClass: this.activityForm.get('assetClass').value, - assetSubClass: this.activityForm.get('assetSubClass').value, - comment: this.activityForm.get('comment').value || null, - currency: this.activityForm.get('currency').value, - customCurrency: this.activityForm.get('currencyOfUnitPrice').value, - date: this.activityForm.get('date').value, - dataSource: this.activityForm.get('dataSource').value, - fee: this.activityForm.get('fee').value, - quantity: this.activityForm.get('quantity').value, - symbol: - this.activityForm.get('searchSymbol').value?.symbol === undefined || - isUUID(this.activityForm.get('searchSymbol').value?.symbol) - ? this.activityForm.get('name').value - : this.activityForm.get('searchSymbol').value.symbol, - tags: this.activityForm.get('tags').value, - type: this.activityForm.get('type').value, - unitPrice: this.activityForm.get('unitPrice').value - }; - try { if (this.mode === 'create') { - (activity as CreateOrderDto).updateAccountBalance = - this.activityForm.get('updateAccountBalance').value; + const activity = this.getActivity() as CreateOrderDto; + + activity.updateAccountBalance = this.activityForm.get( + 'updateAccountBalance' + ).value; await validateObjectForForm({ classDto: CreateOrderDto, @@ -515,16 +505,18 @@ export class CreateOrUpdateActivityDialog implements OnDestroy { this.dialogRef.close(activity as CreateOrderDto); } else { - (activity as UpdateOrderDto).id = this.data.activity.id; + const activity = this.getActivity() as UpdateOrderDto; + + activity.id = this.data.activity.id; await validateObjectForForm({ classDto: UpdateOrderDto, form: this.activityForm, ignoreFields: ['dataSource', 'date'], - object: activity as UpdateOrderDto + object: activity }); - this.dialogRef.close(activity as UpdateOrderDto); + this.dialogRef.close(activity); } } catch (error) { console.error(error); @@ -546,6 +538,29 @@ export class CreateOrUpdateActivityDialog implements OnDestroy { }); } + private getActivity(): CreateOrderDto | UpdateOrderDto { + return { + accountId: this.activityForm.get('accountId').value, + assetClass: this.activityForm.get('assetClass').value, + assetSubClass: this.activityForm.get('assetSubClass').value, + comment: this.activityForm.get('comment').value || null, + currency: this.activityForm.get('currency').value, + customCurrency: this.activityForm.get('currencyOfUnitPrice').value, + date: this.activityForm.get('date').value, + dataSource: this.activityForm.get('dataSource').value, + fee: this.activityForm.get('fee').value, + quantity: this.activityForm.get('quantity').value, + symbol: + this.activityForm.get('searchSymbol').value?.symbol === undefined || + isUUID(this.activityForm.get('searchSymbol').value?.symbol) + ? this.activityForm.get('name').value + : this.activityForm.get('searchSymbol').value.symbol, + tags: this.activityForm.get('tags').value, + type: this.activityForm.get('type').value, + unitPrice: this.activityForm.get('unitPrice').value + }; + } + private updateSymbol() { this.isLoading = true; this.changeDetectorRef.markForCheck();