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
+41 -7
View File
@@ -66,7 +66,8 @@
<!-- Name Column -->
<ng-container matColumnDef="displayName">
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.name' | translate }}</th>
<td mat-cell *matCellDef="let row" [routerLink]="[row.id, 'general']" class="cell-link">
<td mat-cell *matCellDef="let row" class="cell-link">
<mat-icon class="row-legal-icon" [ngClass]="row.legalForm?.id === 2 ? 'entity' : 'person'">{{ row.legalForm?.id === 2 ? 'business' : 'person' }}</mat-icon>
{{ hideClientData ? maskName(row.displayName) : row.displayName }}
</td>
</ng-container>
@@ -85,11 +86,13 @@
<td mat-cell *matCellDef="let row" class="cell-mono">{{ row.cifNumber }}</td>
</ng-container>
<!-- External ID Column -->
<ng-container matColumnDef="externalId">
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.External Id' | translate }}</th>
<td mat-cell *matCellDef="let row" class="cell-mono">
<mifosx-external-identifier display="left" externalId="{{ row.externalId }}"></mifosx-external-identifier>
<!-- Legal Form Column -->
<ng-container matColumnDef="legalForm">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Legal Form' | translate }}</th>
<td mat-cell *matCellDef="let row">
<span class="legal-form-badge" [ngClass]="row.legalForm?.id === 2 ? 'entity' : 'person'">
{{ row.legalForm?.id === 2 ? 'Non-Individual' : 'Individual' }}
</span>
</td>
</ng-container>
@@ -103,12 +106,43 @@
</td>
</ng-container>
<!-- Profile Completion Column -->
<ng-container matColumnDef="profileCompletion">
<th mat-header-cell *matHeaderCellDef>Profile</th>
<td mat-cell *matCellDef="let row">
<div class="profile-steps">
@for (step of getProfileSteps(row); track step.label) {
<span class="step-dot" [class.done]="step.done" [matTooltip]="step.label + (step.done ? ' ✓' : ' — Pending')">
{{ step.label.charAt(0) }}
</span>
}
</div>
</td>
</ng-container>
<!-- Office Column -->
<ng-container matColumnDef="officeName">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Office Name' | translate }}</th>
<td mat-cell *matCellDef="let row">{{ row.officeName }}</td>
</ng-container>
<!-- Actions Column -->
<ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Actions' | translate }}</th>
<td mat-cell *matCellDef="let row" (click)="$event.stopPropagation()">
<div class="action-icons">
<button mat-button class="action-chip action-chip--view" [routerLink]="[row.id, 'general']">
<mat-icon>visibility</mat-icon>
View
</button>
<button mat-button class="action-chip action-chip--edit" [routerLink]="[row.id, 'edit']">
<mat-icon>edit_note</mat-icon>
Edit
</button>
</div>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns" class="table-row"></tr>
</table>
@@ -123,7 +157,7 @@
</div>
<!-- Empty State -->
<div class="empty-state" [hidden]="!notExistsClientsToFilter">
<div class="empty-state" *ngIf="notExistsClientsToFilter">
<fa-icon icon="search" class="empty-icon"></fa-icon>
<p class="empty-text">{{ 'labels.text.No client was found' | translate }}</p>
</div>