Skip to content

Commit fc01a4b

Browse files
committed
WEB-460 Shares per Client Field Allows Zero and Negative Values in Share Product Creation Form
1 parent 5666fcb commit fc01a4b

File tree

2 files changed

+89
-19
lines changed

2 files changed

+89
-19
lines changed

src/app/products/share-products/share-product-stepper/share-product-settings-step/share-product-settings-step.component.html

Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,56 @@ <h4 class="mat-h4 flex-98">
1212

1313
<mat-form-field class="flex-31">
1414
<mat-label>{{ 'labels.inputs.Minimum' | translate }}</mat-label>
15-
<input type="number" matInput formControlName="minimumShares" />
15+
<input type="number" matInput formControlName="minimumShares" min="1" step="1" required />
16+
<mat-error *ngIf="shareProductSettingsForm.get('minimumShares').hasError('required')">
17+
Minimum is <strong>required</strong>
18+
</mat-error>
19+
<mat-error *ngIf="shareProductSettingsForm.get('minimumShares').hasError('min')">
20+
{{ 'labels.inputs.Minimum Shares per Client' | translate }}
21+
{{ 'labels.commons.must be greater than zero' | translate }}
22+
</mat-error>
23+
<mat-error *ngIf="shareProductSettingsForm.get('minimumShares').hasError('pattern')">
24+
{{ 'labels.inputs.Minimum Shares per Client' | translate }}
25+
{{ 'labels.commons.must be an integer' | translate }}
26+
</mat-error>
1627
</mat-form-field>
1728

1829
<mat-form-field class="flex-31">
1930
<mat-label>{{ 'labels.inputs.Default' | translate }}</mat-label>
20-
<input type="number" matInput formControlName="nominalShares" required />
21-
<mat-error>
22-
{{ 'labels.inputs.Default Shares per Client' | translate }} {{ 'labels.commons.is' | translate }}
23-
<strong>{{ 'labels.commons.required' | translate }}</strong>
31+
<input type="number" matInput formControlName="nominalShares" min="1" step="1" required />
32+
<mat-error *ngIf="shareProductSettingsForm.get('nominalShares').hasError('required')">
33+
Default is <strong>required</strong>
34+
</mat-error>
35+
<mat-error *ngIf="shareProductSettingsForm.get('nominalShares').hasError('min')">
36+
{{ 'labels.inputs.Default Shares per Client' | translate }}
37+
{{ 'labels.commons.must be greater than zero' | translate }}
38+
</mat-error>
39+
<mat-error *ngIf="shareProductSettingsForm.get('nominalShares').hasError('pattern')">
40+
{{ 'labels.inputs.Default Shares per Client' | translate }}
41+
{{ 'labels.commons.must be an integer' | translate }}
2442
</mat-error>
2543
</mat-form-field>
2644

2745
<mat-form-field class="flex-31">
2846
<mat-label>{{ 'labels.inputs.Maximum' | translate }}</mat-label>
29-
<input type="number" matInput formControlName="maximumShares" />
47+
<input type="number" matInput formControlName="maximumShares" min="1" step="1" required />
48+
<mat-error *ngIf="shareProductSettingsForm.get('maximumShares').hasError('required')">
49+
Maximum is <strong>required</strong>
50+
</mat-error>
51+
<mat-error *ngIf="shareProductSettingsForm.get('maximumShares').hasError('min')">
52+
{{ 'labels.inputs.Maximum Shares per Client' | translate }}
53+
{{ 'labels.commons.must be greater than zero' | translate }}
54+
</mat-error>
55+
<mat-error *ngIf="shareProductSettingsForm.get('maximumShares').hasError('pattern')">
56+
{{ 'labels.inputs.Maximum Shares per Client' | translate }}
57+
{{ 'labels.commons.must be an integer' | translate }}
58+
</mat-error>
59+
<mat-error *ngIf="shareProductSettingsForm.hasError('sharesOrder')">
60+
{{
61+
'labels.commons.minimum must be less than or equal to default and default must be less than or equal to maximum'
62+
| translate
63+
}}
64+
</mat-error>
3065
</mat-form-field>
3166

3267
<h4 class="mat-h4 flex-98">

src/app/products/share-products/share-product-stepper/share-product-settings-step/share-product-settings-step.component.ts

Lines changed: 48 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -53,19 +53,54 @@ export class ShareProductSettingsStepComponent implements OnInit {
5353
}
5454

5555
createShareProductSettingsForm() {
56-
this.shareProductSettingsForm = this.formBuilder.group({
57-
minimumShares: [''],
58-
nominalShares: [
59-
'',
60-
Validators.required
61-
],
62-
maximumShares: [''],
63-
minimumActivePeriodForDividends: [''],
64-
minimumactiveperiodFrequencyType: [''],
65-
lockinPeriodFrequency: [''],
66-
lockinPeriodFrequencyType: [''],
67-
allowDividendCalculationForInactiveClients: [false]
68-
});
56+
this.shareProductSettingsForm = this.formBuilder.group(
57+
{
58+
minimumShares: [
59+
'',
60+
[
61+
Validators.required,
62+
Validators.min(1),
63+
Validators.pattern(/^[0-9]+$/)
64+
]
65+
],
66+
nominalShares: [
67+
'',
68+
[
69+
Validators.required,
70+
Validators.min(1),
71+
Validators.pattern(/^[0-9]+$/)
72+
]
73+
],
74+
maximumShares: [
75+
'',
76+
[
77+
Validators.required,
78+
Validators.min(1),
79+
Validators.pattern(/^[0-9]+$/)
80+
]
81+
],
82+
minimumActivePeriodForDividends: [''],
83+
minimumactiveperiodFrequencyType: [''],
84+
lockinPeriodFrequency: [''],
85+
lockinPeriodFrequencyType: [''],
86+
allowDividendCalculationForInactiveClients: [false]
87+
},
88+
{
89+
validators: this.validateSharesOrder
90+
}
91+
);
92+
}
93+
94+
private validateSharesOrder(group: UntypedFormGroup): { [key: string]: any } | null {
95+
const min = Number(group.get('minimumShares')?.value);
96+
const nominal = Number(group.get('nominalShares')?.value);
97+
const max = Number(group.get('maximumShares')?.value);
98+
if (min && nominal && max) {
99+
if (min > nominal || nominal > max) {
100+
return { sharesOrder: true };
101+
}
102+
}
103+
return null;
69104
}
70105

71106
get shareProductSettings() {

0 commit comments

Comments
 (0)