Skip to content

Commit b5f7a32

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

File tree

2 files changed

+90
-17
lines changed

2 files changed

+90
-17
lines changed

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

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,59 @@ <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+
{{ 'labels.inputs.Minimum Shares per Client' | translate }} {{ 'labels.commons.is' | translate }}
18+
<strong>{{ 'labels.commons.required' | translate }}</strong>
19+
</mat-error>
20+
<mat-error *ngIf="shareProductSettingsForm.get('minimumShares').hasError('min')">
21+
{{ 'labels.inputs.Minimum Shares per Client' | translate }}
22+
{{ 'labels.commons.must be greater than zero' | translate }}
23+
</mat-error>
24+
<mat-error *ngIf="shareProductSettingsForm.get('minimumShares').hasError('pattern')">
25+
{{ 'labels.inputs.Minimum Shares per Client' | translate }}
26+
{{ 'labels.commons.must be an integer' | translate }}
27+
</mat-error>
1628
</mat-form-field>
1729

1830
<mat-form-field class="flex-31">
1931
<mat-label>{{ 'labels.inputs.Default' | translate }}</mat-label>
20-
<input type="number" matInput formControlName="nominalShares" required />
21-
<mat-error>
32+
<input type="number" matInput formControlName="nominalShares" min="1" step="1" required />
33+
<mat-error *ngIf="shareProductSettingsForm.get('nominalShares').hasError('required')">
2234
{{ 'labels.inputs.Default Shares per Client' | translate }} {{ 'labels.commons.is' | translate }}
2335
<strong>{{ 'labels.commons.required' | translate }}</strong>
2436
</mat-error>
37+
<mat-error *ngIf="shareProductSettingsForm.get('nominalShares').hasError('min')">
38+
{{ 'labels.inputs.Default Shares per Client' | translate }}
39+
{{ 'labels.commons.must be greater than zero' | translate }}
40+
</mat-error>
41+
<mat-error *ngIf="shareProductSettingsForm.get('nominalShares').hasError('pattern')">
42+
{{ 'labels.inputs.Default Shares per Client' | translate }}
43+
{{ 'labels.commons.must be an integer' | translate }}
44+
</mat-error>
2545
</mat-form-field>
2646

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

3270
<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)