feat: non-individual entity UI improvements — hide individual-only sections, fix legal form display, send extended fields to API

- Hide Family Members tab/section for non-individual entities in client view, create flow, and preview
- Hide Financial & Classification section for non-individual entities in personal data and preview
- Fix legal form column in clients list — fetch legalForm from client API for correct display
- Add person/business icon before client name in list rows
- Remove unsupportedNpd filter — send authorizedSignatory, additionalInfo, dateOfRegistration to API
- Add registration number format hint (mat-hint) based on constitution type
- Add spacing between verification row and constitution type dropdowns
- Reduce table cell padding and prevent action buttons from being clipped
- Add missing MPL-2.0 license headers

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Aditya
2026-04-04 15:10:51 +05:30
co-authored by Claude Opus 4.6
parent ab01111424
commit b890d24bb7
522 changed files with 51991 additions and 21885 deletions
@@ -6,9 +6,10 @@
file, You can obtain one at http://mozilla.org/MPL/2.0/.
-->
<div class="tab-container mat-typography">
<div class="search-row">
<mat-form-field class="search-field">
<div class="cv-tab-content">
<div class="cv-action-bar">
<mat-form-field appearance="outline" class="cv-search-field">
<mat-icon matPrefix>search</mat-icon>
<input
matInput
placeholder="{{ 'labels.text.Search by user' | translate }}"
@@ -18,7 +19,7 @@
<button
mat-icon-button
(click)="toggleAdvancedSearch()"
class="icon-button"
class="cv-toggle-btn"
[attr.aria-label]="
showAdvancedSearch
? ('labels.buttons.Hide advanced search' | translate)
@@ -28,20 +29,23 @@
>
<mat-icon>{{ showAdvancedSearch ? 'arrow_drop_up' : 'arrow_drop_down' }}</mat-icon>
</button>
<button mat-raised-button class="mat-success tasks-action-btn" (click)="approveChecker()">
<fa-icon icon="check" class="m-r-10"></fa-icon>{{ 'labels.buttons.Approve' | translate }}
</button>
<button mat-raised-button color="warn" (click)="deleteChecker()" class="action-button">
<fa-icon icon="trash" class="m-r-10"></fa-icon>{{ 'labels.buttons.Delete' | translate }}
</button>
<button mat-raised-button class="mat-reject tasks-action-btn" (click)="rejectChecker()">
<fa-icon icon="times" class="m-r-10"></fa-icon>{{ 'labels.buttons.Reject' | translate }}
</button>
<div class="cv-action-buttons">
<button mat-stroked-button class="cv-btn cv-btn-approve" (click)="approveChecker()">
<fa-icon icon="check" class="m-r-10"></fa-icon>{{ 'labels.buttons.Approve' | translate }}
</button>
<button mat-stroked-button class="cv-btn cv-btn-delete" (click)="deleteChecker()">
<fa-icon icon="trash" class="m-r-10"></fa-icon>{{ 'labels.buttons.Delete' | translate }}
</button>
<button mat-stroked-button class="cv-btn cv-btn-reject" (click)="rejectChecker()">
<fa-icon icon="times" class="m-r-10"></fa-icon>{{ 'labels.buttons.Reject' | translate }}
</button>
</div>
</div>
@if (showAdvancedSearch) {
<form [formGroup]="makerCheckerSearchForm">
<div class="advanced-search-container">
<mat-form-field class="search-field" (click)="makerDateTimeFromPicker.open()">
<div class="cv-advanced-search">
<mat-form-field appearance="outline" class="cv-adv-field" (click)="makerDateTimeFromPicker.open()">
<mat-label>{{ 'labels.inputs.From date' | translate }}</mat-label>
<input
matInput
@@ -53,7 +57,7 @@
<mat-datepicker-toggle matSuffix [for]="makerDateTimeFromPicker"></mat-datepicker-toggle>
<mat-datepicker #makerDateTimeFromPicker></mat-datepicker>
</mat-form-field>
<mat-form-field class="search-field" (click)="makerDateTimetoPicker.open()">
<mat-form-field appearance="outline" class="cv-adv-field" (click)="makerDateTimetoPicker.open()">
<mat-label>{{ 'labels.inputs.To date' | translate }}</mat-label>
<input
matInput
@@ -65,7 +69,7 @@
<mat-datepicker-toggle matSuffix [for]="makerDateTimetoPicker"></mat-datepicker-toggle>
<mat-datepicker #makerDateTimetoPicker></mat-datepicker>
</mat-form-field>
<mat-form-field class="search-field">
<mat-form-field appearance="outline" class="cv-adv-field">
<mat-label>{{ 'labels.inputs.Select action' | translate }}</mat-label>
<mat-select formControlName="actionName">
@for (action of makerCheckerTemplate.actionNames; track action) {
@@ -75,7 +79,7 @@
}
</mat-select>
</mat-form-field>
<mat-form-field class="search-field">
<mat-form-field appearance="outline" class="cv-adv-field">
<mat-label>{{ 'labels.inputs.Select entity' | translate }}</mat-label>
<mat-select formControlName="entityName">
@for (entity of makerCheckerTemplate.entityNames; track entity) {
@@ -85,86 +89,88 @@
}
</mat-select>
</mat-form-field>
<mat-form-field class="search-field">
<mat-form-field appearance="outline" class="cv-adv-field">
<mat-label>{{ 'labels.inputs.Resource id' | translate }}</mat-label>
<input matInput formControlName="resourceId" />
</mat-form-field>
<button mat-raised-button color="primary" id="search-button" type="button" (click)="search()">
<button mat-flat-button color="primary" class="cv-btn cv-btn-search" type="button" (click)="search()">
<fa-icon icon="search" class="m-r-10"></fa-icon>{{ 'labels.buttons.Advanced Search' | translate }}
</button>
</div>
</form>
}
@if (checkerData && !noSearchedData) {
<table mat-table [dataSource]="dataSource">
<ng-container matColumnDef="select">
<th mat-header-cell *matHeaderCellDef>
<mat-checkbox
(change)="$event ? masterToggle() : null"
[checked]="selection.hasValue() && isAllSelected()"
[indeterminate]="selection.hasValue() && !isAllSelected()"
[aria-label]="checkboxLabel()"
>
</mat-checkbox>
</th>
<td mat-cell *matCellDef="let row">
<mat-checkbox
(click)="$event.stopPropagation()"
(change)="$event ? selection.toggle(row) : null"
[checked]="selection.isSelected(row)"
[aria-label]="checkboxLabel(row)"
>
</mat-checkbox>
</td>
</ng-container>
<ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.ID' | translate }}</th>
<td mat-cell *matCellDef="let makerChecker">{{ makerChecker.id }}</td>
</ng-container>
<ng-container matColumnDef="madeOnDate">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Made on Date' | translate }}</th>
<td mat-cell *matCellDef="let makerChecker">{{ makerChecker.madeOnDate | dateFormat }}</td>
</ng-container>
<ng-container matColumnDef="status">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Status' | translate }}</th>
<td mat-cell *matCellDef="let makerChecker">{{ makerChecker.processingResult }}</td>
</ng-container>
<ng-container matColumnDef="user">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.User' | translate }}</th>
<td mat-cell *matCellDef="let makerChecker">{{ makerChecker.maker }}</td>
</ng-container>
<ng-container matColumnDef="action">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Action' | translate }}</th>
<td mat-cell *matCellDef="let makerChecker">{{ makerChecker.actionName }}</td>
</ng-container>
<ng-container matColumnDef="entity">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Entity' | translate }}</th>
<td mat-cell *matCellDef="let makerChecker">{{ makerChecker.entityName }}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr
mat-row
*matRowDef="let row; columns: displayedColumns"
[routerLink]="[row.id, 'view']"
class="select-row"
></tr>
</table>
<div class="table-container">
<table mat-table [dataSource]="dataSource" class="modern-table">
<ng-container matColumnDef="select">
<th mat-header-cell *matHeaderCellDef>
<mat-checkbox
(change)="$event ? masterToggle() : null"
[checked]="selection.hasValue() && isAllSelected()"
[indeterminate]="selection.hasValue() && !isAllSelected()"
[aria-label]="checkboxLabel()"
>
</mat-checkbox>
</th>
<td mat-cell *matCellDef="let row">
<mat-checkbox
(click)="$event.stopPropagation()"
(change)="$event ? selection.toggle(row) : null"
[checked]="selection.isSelected(row)"
[aria-label]="checkboxLabel(row)"
>
</mat-checkbox>
</td>
</ng-container>
<ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.ID' | translate }}</th>
<td mat-cell *matCellDef="let makerChecker" class="cell-mono">{{ makerChecker.id }}</td>
</ng-container>
<ng-container matColumnDef="madeOnDate">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Made on Date' | translate }}</th>
<td mat-cell *matCellDef="let makerChecker">{{ makerChecker.madeOnDate | dateFormat }}</td>
</ng-container>
<ng-container matColumnDef="status">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Status' | translate }}</th>
<td mat-cell *matCellDef="let makerChecker">
<span class="status-badge">{{ makerChecker.processingResult }}</span>
</td>
</ng-container>
<ng-container matColumnDef="user">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.User' | translate }}</th>
<td mat-cell *matCellDef="let makerChecker">{{ makerChecker.maker }}</td>
</ng-container>
<ng-container matColumnDef="action">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Action' | translate }}</th>
<td mat-cell *matCellDef="let makerChecker">{{ makerChecker.actionName }}</td>
</ng-container>
<ng-container matColumnDef="entity">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Entity' | translate }}</th>
<td mat-cell *matCellDef="let makerChecker">{{ makerChecker.entityName }}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr
mat-row
*matRowDef="let row; columns: displayedColumns"
[routerLink]="[row.id, 'view']"
class="table-row"
></tr>
</table>
</div>
}
@if (checkerData && noSearchedData) {
<div class="alert">
<div class="message">
<i class="fa fa-exclamation-circle alert-check fa-2x"></i>
{{ 'labels.text.No checker inbox data available for this search' | translate }}
</div>
<div class="empty-state">
<i class="fas fa-inbox empty-icon"></i>
<p class="empty-text">{{ 'labels.text.No checker inbox data available for this search' | translate }}</p>
</div>
}
@if (!checkerData) {
<div class="alert">
<div class="message">
<i class="fa fa-exclamation-circle alert-check fa-2x"></i>
{{ 'labels.text.No checker inbox data available for this account' | translate }}
</div>
<div class="empty-state">
<i class="fas fa-inbox empty-icon"></i>
<p class="empty-text">{{ 'labels.text.No checker inbox data available for this account' | translate }}</p>
</div>
}
</div>