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() {