From 207d2bc52db15d8f439dc0e582fecc6de8931a79 Mon Sep 17 00:00:00 2001 From: Nicolas Fedor Date: Fri, 29 Mar 2024 19:54:59 +0000 Subject: [PATCH] Add SPLIT order type --- ...ate-or-update-activity-dialog.component.ts | 58 ++++++++++++++++++- .../create-or-update-activity-dialog.html | 24 +++++++- libs/ui/src/lib/i18n.ts | 1 + .../migration.sql | 2 + prisma/schema.prisma | 1 + 5 files changed, 82 insertions(+), 4 deletions(-) create mode 100644 prisma/migrations/20240329190053_added_split_to_order_type/migration.sql 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 b628aba46..c3f527f0c 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 @@ -279,7 +279,7 @@ export class CreateOrUpdateActivityDialog implements OnDestroy { if (this.activityForm.controls['searchSymbol'].invalid) { this.data.activity.SymbolProfile = null; } else if ( - ['BUY', 'DIVIDEND', 'SELL'].includes( + ['BUY', 'DIVIDEND', 'SELL', 'SPLIT'].includes( this.activityForm.controls['type'].value ) ) { @@ -394,6 +394,62 @@ export class CreateOrUpdateActivityDialog implements OnDestroy { this.activityForm.controls['updateAccountBalance'].disable(); this.activityForm.controls['updateAccountBalance'].setValue(false); } + } else if (type === 'SPLIT') { + this.activityForm.controls['currency'].removeValidators( + Validators.required + ); + this.activityForm.controls['currency'].updateValueAndValidity(); + + this.activityForm.controls['currencyOfFee'].removeValidators( + Validators.required + ); + this.activityForm.controls['currencyOfFee'].updateValueAndValidity(); + + this.activityForm.controls['currencyOfUnitPrice'].removeValidators( + Validators.required + ); + this.activityForm.controls[ + 'currencyOfUnitPrice' + ].updateValueAndValidity(); + + this.activityForm.controls['fee'].removeValidators( + Validators.required + ); + this.activityForm.controls['fee'].updateValueAndValidity(); + + this.activityForm.controls['feeInCustomCurrency'].removeValidators( + Validators.required + ); + this.activityForm.controls[ + 'feeInCustomCurrency' + ].updateValueAndValidity(); + + // this.activityForm.controls['searchSymbol'].removeValidators( + // Validators.required + // ); + // this.activityForm.controls['searchSymbol'].updateValueAndValidity(); + + this.activityForm.controls['unitPrice'].removeValidators( + Validators.required + ); + this.activityForm.controls['unitPrice'].updateValueAndValidity(); + + this.activityForm.controls[ + 'unitPriceInCustomCurrency' + ].removeValidators(Validators.required); + this.activityForm.controls[ + 'unitPriceInCustomCurrency' + ].updateValueAndValidity(); + + // this.activityForm.controls['dataSource'].removeValidators( + // Validators.required + // ); + // this.activityForm.controls['dataSource'].updateValueAndValidity(); + + this.activityForm.controls['quantity'].setValue(1); + + this.activityForm.controls['updateAccountBalance'].disable(); + this.activityForm.controls['updateAccountBalance'].setValue(false); } else { this.activityForm.controls['accountId'].setValidators( Validators.required 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 81c41a316..87ffc2e18 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 @@ -70,6 +70,14 @@ >Luxury items, real estate, private companies + + {{ typesTranslationMap['SPLIT'] }} + Forward split, reverse split + @@ -180,13 +188,22 @@ }" > - Quantity + + Ratio + Quantity + +
@@ -279,7 +296,8 @@ 'd-none': activityForm.controls['type']?.value === 'INTEREST' || activityForm.controls['type']?.value === 'ITEM' || - activityForm.controls['type']?.value === 'LIABILITY' + activityForm.controls['type']?.value === 'LIABILITY' || + activityForm.controls['type']?.value === 'SPLIT' }" > diff --git a/libs/ui/src/lib/i18n.ts b/libs/ui/src/lib/i18n.ts index 9687f461c..c5af1b6e0 100644 --- a/libs/ui/src/lib/i18n.ts +++ b/libs/ui/src/lib/i18n.ts @@ -34,6 +34,7 @@ const locales = { ITEM: $localize`Valuable`, LIABILITY: $localize`Liability`, SELL: $localize`Sell`, + SPLIT: $localize`Stock Split`, // AssetClass (enum) CASH: $localize`Cash`, diff --git a/prisma/migrations/20240329190053_added_split_to_order_type/migration.sql b/prisma/migrations/20240329190053_added_split_to_order_type/migration.sql new file mode 100644 index 000000000..618c241b8 --- /dev/null +++ b/prisma/migrations/20240329190053_added_split_to_order_type/migration.sql @@ -0,0 +1,2 @@ +-- AlterEnum +ALTER TYPE "Type" ADD VALUE 'SPLIT'; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 0b40109e8..3c35e2110 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -301,6 +301,7 @@ enum Type { ITEM LIABILITY SELL + SPLIT } enum ViewMode {