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 07b523a443..2fac7b0fb1 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 930f8b36af..7867857150 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() {