From 94bb2a06b2a99f10ad0bc328ea7f209bf280e199 Mon Sep 17 00:00:00 2001 From: Soni Jay Date: Wed, 10 Dec 2025 00:02:00 +0530 Subject: [PATCH] WEB-460 Shares per Client Field Allows Zero and Negative Values in Share Product Creation Form --- ...share-product-settings-step.component.html | 47 ++++++++++++-- .../share-product-settings-step.component.ts | 61 +++++++++++++++---- 2 files changed, 89 insertions(+), 19 deletions(-) diff --git a/src/app/products/share-products/share-product-stepper/share-product-settings-step/share-product-settings-step.component.html b/src/app/products/share-products/share-product-stepper/share-product-settings-step/share-product-settings-step.component.html index 07b523a44..2fac7b0fb 100644 --- a/src/app/products/share-products/share-product-stepper/share-product-settings-step/share-product-settings-step.component.html +++ b/src/app/products/share-products/share-product-stepper/share-product-settings-step/share-product-settings-step.component.html @@ -12,21 +12,56 @@ {{ 'labels.inputs.Minimum' | translate }} - + + + Minimum is required + + + {{ 'labels.inputs.Minimum Shares per Client' | translate }} + {{ 'labels.commons.must be greater than zero' | translate }} + + + {{ 'labels.inputs.Minimum Shares per Client' | translate }} + {{ 'labels.commons.must be an integer' | translate }} + {{ 'labels.inputs.Default' | translate }} - - - {{ 'labels.inputs.Default Shares per Client' | translate }} {{ 'labels.commons.is' | translate }} - {{ 'labels.commons.required' | translate }} + + + Default is required + + + {{ 'labels.inputs.Default Shares per Client' | translate }} + {{ 'labels.commons.must be greater than zero' | translate }} + + + {{ 'labels.inputs.Default Shares per Client' | translate }} + {{ 'labels.commons.must be an integer' | translate }} {{ 'labels.inputs.Maximum' | translate }} - + + + Maximum is required + + + {{ 'labels.inputs.Maximum Shares per Client' | translate }} + {{ 'labels.commons.must be greater than zero' | translate }} + + + {{ 'labels.inputs.Maximum Shares per Client' | translate }} + {{ 'labels.commons.must be an integer' | translate }} + + + {{ + 'labels.commons.minimum must be less than or equal to default and default must be less than or equal to maximum' + | translate + }} +

diff --git a/src/app/products/share-products/share-product-stepper/share-product-settings-step/share-product-settings-step.component.ts b/src/app/products/share-products/share-product-stepper/share-product-settings-step/share-product-settings-step.component.ts index 930f8b36a..786785715 100644 --- a/src/app/products/share-products/share-product-stepper/share-product-settings-step/share-product-settings-step.component.ts +++ b/src/app/products/share-products/share-product-stepper/share-product-settings-step/share-product-settings-step.component.ts @@ -53,19 +53,54 @@ export class ShareProductSettingsStepComponent implements OnInit { } createShareProductSettingsForm() { - this.shareProductSettingsForm = this.formBuilder.group({ - minimumShares: [''], - nominalShares: [ - '', - Validators.required - ], - maximumShares: [''], - minimumActivePeriodForDividends: [''], - minimumactiveperiodFrequencyType: [''], - lockinPeriodFrequency: [''], - lockinPeriodFrequencyType: [''], - allowDividendCalculationForInactiveClients: [false] - }); + this.shareProductSettingsForm = this.formBuilder.group( + { + minimumShares: [ + '', + [ + Validators.required, + Validators.min(1), + Validators.pattern(/^[0-9]+$/) + ] + ], + nominalShares: [ + '', + [ + Validators.required, + Validators.min(1), + Validators.pattern(/^[0-9]+$/) + ] + ], + maximumShares: [ + '', + [ + Validators.required, + Validators.min(1), + Validators.pattern(/^[0-9]+$/) + ] + ], + minimumActivePeriodForDividends: [''], + minimumactiveperiodFrequencyType: [''], + lockinPeriodFrequency: [''], + lockinPeriodFrequencyType: [''], + allowDividendCalculationForInactiveClients: [false] + }, + { + validators: this.validateSharesOrder + } + ); + } + + private validateSharesOrder(group: UntypedFormGroup): { [key: string]: any } | null { + const min = Number(group.get('minimumShares')?.value); + const nominal = Number(group.get('nominalShares')?.value); + const max = Number(group.get('maximumShares')?.value); + if (min && nominal && max) { + if (min > nominal || nominal > max) { + return { sharesOrder: true }; + } + } + return null; } get shareProductSettings() {