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,347 +6,186 @@
file, You can obtain one at http://mozilla.org/MPL/2.0/.
-->
<!-- TODO: Refactor Permissions -->
<div class="container">
<mat-card>
<div class="layout-row responsive-column gap-20px">
<div class="flex-50">
<mat-nav-list>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Offices']">
<fa-icon icon="building" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Offices']">{{ 'labels.heading.Offices' | translate }}</h4>
@if (!arrowBooleans[0]) {
<fa-icon (click)="arrowBooleansToggle(0)" icon="arrow-down" size="md"></fa-icon>
}
@if (arrowBooleans[0]) {
<fa-icon (click)="arrowBooleansToggle(0)" icon="arrow-up" size="md"></fa-icon>
}
@if (arrowBooleans[0]) {
<p matLine [routerLink]="['Offices']">
{{ 'labels.text.Download, Upload Offices Template' | translate }}
</p>
}
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Users']">
<fa-icon icon="user" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Users']">{{ 'labels.heading.Users' | translate }}</h4>
@if (!arrowBooleans[1]) {
<fa-icon (click)="arrowBooleansToggle(1)" icon="arrow-down" size="md"></fa-icon>
}
@if (arrowBooleans[1]) {
<fa-icon (click)="arrowBooleansToggle(1)" icon="arrow-up" size="md"></fa-icon>
}
@if (arrowBooleans[1]) {
<p matLine [routerLink]="['Users']">
{{ 'labels.text.Download offices template and Upload office excel files' | translate }}
</p>
}
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Groups']">
<fa-icon icon="users" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Groups']">{{ 'labels.heading.Groups' | translate }}</h4>
@if (!arrowBooleans[2]) {
<fa-icon (click)="arrowBooleansToggle(2)" icon="arrow-down" size="md"></fa-icon>
}
@if (arrowBooleans[2]) {
<fa-icon (click)="arrowBooleansToggle(2)" icon="arrow-up" size="md"></fa-icon>
}
@if (arrowBooleans[2]) {
<p matLine [routerLink]="['Groups']">
{{ 'labels.text.Download groups template and Upload group excel files' | translate }}
</p>
}
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Loan Accounts']">
<fa-icon icon="money-bill-alt" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Loan Accounts']">{{ 'labels.heading.Loan Accounts' | translate }}</h4>
@if (!arrowBooleans[3]) {
<fa-icon (click)="arrowBooleansToggle(3)" icon="arrow-down" size="md"></fa-icon>
}
@if (arrowBooleans[3]) {
<fa-icon (click)="arrowBooleansToggle(3)" icon="arrow-up" size="md"></fa-icon>
}
@if (arrowBooleans[3]) {
<p matLine [routerLink]="['Loan Accounts']">
{{ 'labels.text.Download loan accounts template and upload loan account excel files' | translate }}
</p>
}
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Savings Accounts']">
<fa-icon icon="briefcase" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Savings Accounts']">{{ 'labels.heading.Savings Accounts' | translate }}</h4>
@if (!arrowBooleans[4]) {
<fa-icon (click)="arrowBooleansToggle(4)" icon="arrow-down" size="md"></fa-icon>
}
@if (arrowBooleans[4]) {
<fa-icon (click)="arrowBooleansToggle(4)" icon="arrow-up" size="md"></fa-icon>
}
@if (arrowBooleans[4]) {
<p matLine [routerLink]="['Savings Accounts']">
{{
'labels.text.Download savings accounts template and upload savings account excel files' | translate
}}
</p>
}
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Fixed Deposit Accounts']">
<fa-icon icon="briefcase" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Fixed Deposit Accounts']">
{{ 'labels.heading.Fixed Deposit Accounts' | translate }}
</h4>
@if (!arrowBooleans[5]) {
<fa-icon (click)="arrowBooleansToggle(5)" icon="arrow-down" size="md"></fa-icon>
}
@if (arrowBooleans[5]) {
<fa-icon (click)="arrowBooleansToggle(5)" icon="arrow-up" size="md"></fa-icon>
}
@if (arrowBooleans[5]) {
<p matLine [routerLink]="['Fixed Deposit Accounts']">
{{
'labels.text.Download fixed deposit accounts template and upload fixed deposit account excel files'
| translate
}}
</p>
}
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Chart of Accounts']">
<fa-icon icon="money-bill-alt" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Chart of Accounts']">{{ 'labels.heading.Chart of Accounts' | translate }}</h4>
@if (!arrowBooleans[6]) {
<fa-icon (click)="arrowBooleansToggle(6)" icon="arrow-down" size="md"></fa-icon>
}
@if (arrowBooleans[6]) {
<fa-icon (click)="arrowBooleansToggle(6)" icon="arrow-up" size="md"></fa-icon>
}
@if (arrowBooleans[6]) {
<p matLine [routerLink]="['Chart of Accounts']">
{{
'labels.text.Download chart of accounts template and upload chart of account excel files' | translate
}}
</p>
}
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Share Accounts']">
<fa-icon icon="briefcase" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Share Accounts']">{{ 'labels.heading.Share Accounts' | translate }}</h4>
@if (!arrowBooleans[7]) {
<fa-icon (click)="arrowBooleansToggle(7)" icon="arrow-down" size="md"></fa-icon>
}
@if (arrowBooleans[7]) {
<fa-icon (click)="arrowBooleansToggle(7)" icon="arrow-up" size="md"></fa-icon>
}
@if (arrowBooleans[7]) {
<p matLine [routerLink]="['Share Accounts']">
{{ 'labels.text.Download share accounts template and upload share account excel files' | translate }}
</p>
}
</mat-list-item>
</mat-nav-list>
</div>
<div class="flex-50">
<mat-nav-list>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Employees']">
<fa-icon icon="user" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Employees']">{{ 'labels.heading.Employees' | translate }}</h4>
@if (!arrowBooleans[8]) {
<fa-icon (click)="arrowBooleansToggle(8)" icon="arrow-down" size="md"></fa-icon>
}
@if (arrowBooleans[8]) {
<fa-icon (click)="arrowBooleansToggle(8)" icon="arrow-up" size="md"></fa-icon>
}
@if (arrowBooleans[8]) {
<p matLine [routerLink]="['Employees']">
{{ 'labels.text.Download loan accounts template and upload loan account excel files' | translate }}
</p>
}
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Clients']">
<fa-icon icon="user" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Clients']">{{ 'labels.heading.Clients' | translate }}</h4>
@if (!arrowBooleans[9]) {
<fa-icon (click)="arrowBooleansToggle(9)" icon="arrow-down" size="md"></fa-icon>
}
@if (arrowBooleans[9]) {
<fa-icon (click)="arrowBooleansToggle(9)" icon="arrow-up" size="md"></fa-icon>
}
@if (arrowBooleans[9]) {
<p matLine [routerLink]="['Clients']">
{{ 'labels.text.Download clients template and upload clients excel files' | translate }}
</p>
}
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Centers']">
<fa-icon icon="users" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Centers']">{{ 'labels.heading.Centers' | translate }}</h4>
@if (!arrowBooleans[10]) {
<fa-icon (click)="arrowBooleansToggle(10)" icon="arrow-down" size="md"></fa-icon>
}
@if (arrowBooleans[10]) {
<fa-icon (click)="arrowBooleansToggle(10)" icon="arrow-up" size="md"></fa-icon>
}
@if (arrowBooleans[10]) {
<p matLine [routerLink]="['Centers']">
{{ 'labels.text.Download centers template and upload centers excel files' | translate }}
</p>
}
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Loan Repayments']">
<fa-icon icon="briefcase" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Loan Repayments']">{{ 'labels.heading.Loan Repayments' | translate }}</h4>
@if (!arrowBooleans[11]) {
<fa-icon (click)="arrowBooleansToggle(11)" icon="arrow-down" size="md"></fa-icon>
}
@if (arrowBooleans[11]) {
<fa-icon (click)="arrowBooleansToggle(11)" icon="arrow-up" size="md"></fa-icon>
}
@if (arrowBooleans[11]) {
<p matLine [routerLink]="['Loan Repayments']">
{{ 'labels.text.Download loan repayments template and upload loan repayment excel files' | translate }}
</p>
}
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Savings Transactions']">
<fa-icon icon="briefcase" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Savings Transactions']">
{{ 'labels.heading.Savings Transactions' | translate }}
</h4>
@if (!arrowBooleans[12]) {
<fa-icon (click)="arrowBooleansToggle(12)" icon="arrow-down" size="md"></fa-icon>
}
@if (arrowBooleans[12]) {
<fa-icon (click)="arrowBooleansToggle(12)" icon="arrow-up" size="md"></fa-icon>
}
@if (arrowBooleans[12]) {
<p matLine [routerLink]="['Savings Transactions']">
{{
'labels.text.Download savings transactions template and upload savings transaction excel files'
| translate
}}
</p>
}
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Fixed Deposit Transactions']">
<fa-icon icon="briefcase" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Fixed Deposit Transactions']">
{{ 'labels.heading.Fixed Deposit Transactions' | translate }}
</h4>
@if (!arrowBooleans[13]) {
<fa-icon (click)="arrowBooleansToggle(13)" icon="arrow-down" size="md"></fa-icon>
}
@if (arrowBooleans[13]) {
<fa-icon (click)="arrowBooleansToggle(13)" icon="arrow-up" size="md"></fa-icon>
}
@if (arrowBooleans[13]) {
<p matLine [routerLink]="['Fixed Deposit Transactions']">
{{
'labels.text.Download fixed deposit transactions template and upload fixed deposit transaction excel files'
| translate
}}
</p>
}
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Recurring Deposit Transactions']">
<fa-icon icon="briefcase" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Recurring Deposit Transactions']">
{{ 'labels.heading.Recurring Deposit Transactions' | translate }}
</h4>
@if (!arrowBooleans[14]) {
<fa-icon (click)="arrowBooleansToggle(14)" icon="arrow-down" size="md"></fa-icon>
}
@if (arrowBooleans[14]) {
<fa-icon (click)="arrowBooleansToggle(14)" icon="arrow-up" size="md"></fa-icon>
}
@if (arrowBooleans[14]) {
<p matLine [routerLink]="['Recurring Deposit Transactions']">
{{
'labels.text.Download recurring deposit transactions template and upload recurring deposit transaction excel files'
| translate
}}
</p>
}
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Journal Entries']">
<fa-icon icon="chevron-right" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Journal Entries']">{{ 'labels.heading.Journal Entries' | translate }}</h4>
@if (!arrowBooleans[15]) {
<fa-icon (click)="arrowBooleansToggle(15)" icon="arrow-down" size="md"></fa-icon>
}
@if (arrowBooleans[15]) {
<fa-icon (click)="arrowBooleansToggle(15)" icon="arrow-up" size="md"></fa-icon>
}
@if (arrowBooleans[15]) {
<p matLine [routerLink]="['Journal Entries']">
{{ 'labels.text.Download journal entries template and upload journal entries excel files' | translate }}
</p>
}
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Guarantors']">
<fa-icon icon="chevron-right" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Guarantors']">{{ 'labels.heading.Guarantors' | translate }}</h4>
@if (!arrowBooleans[16]) {
<fa-icon (click)="arrowBooleansToggle(16)" icon="arrow-down" size="md"></fa-icon>
}
@if (arrowBooleans[16]) {
<fa-icon (click)="arrowBooleansToggle(16)" icon="arrow-up" size="md"></fa-icon>
}
@if (arrowBooleans[16]) {
<p matLine [routerLink]="['Guarantors']">
{{ 'labels.text.Download guarantors template and upload guarantor excel files' | translate }}
</p>
}
</mat-list-item>
</mat-nav-list>
</div>
<div class="org-container">
<div class="org-header">
<div class="org-header__icon"><i class="fas fa-upload"></i></div>
<div>
<h1 class="org-header__title">{{ 'labels.heading.Bulk Import' | translate }}</h1>
<p class="org-header__sub">Download templates and upload excel files for bulk data import</p>
</div>
</mat-card>
</div>
<div class="org-grid">
<!-- Offices -->
<a class="org-card" [routerLink]="['Offices']" *mifosxHasPermission="'READ_OFFICE'">
<div class="org-card__icon org-card__icon--blue"><i class="fas fa-building"></i></div>
<div class="org-card__body">
<h3 class="org-card__title">{{ 'labels.heading.Offices' | translate }}</h3>
<p class="org-card__desc">{{ 'labels.text.Download, Upload Offices Template' | translate }}</p>
</div>
<i class="fas fa-chevron-right org-card__arrow"></i>
</a>
<!-- Users -->
<a class="org-card" [routerLink]="['Users']" *mifosxHasPermission="'READ_OFFICE'">
<div class="org-card__icon org-card__icon--purple"><i class="fas fa-user"></i></div>
<div class="org-card__body">
<h3 class="org-card__title">{{ 'labels.heading.Users' | translate }}</h3>
<p class="org-card__desc">{{ 'labels.text.Download offices template and Upload office excel files' | translate }}</p>
</div>
<i class="fas fa-chevron-right org-card__arrow"></i>
</a>
<!-- Groups -->
<a class="org-card" [routerLink]="['Groups']" *mifosxHasPermission="'READ_OFFICE'">
<div class="org-card__icon org-card__icon--green"><i class="fas fa-users"></i></div>
<div class="org-card__body">
<h3 class="org-card__title">{{ 'labels.heading.Groups' | translate }}</h3>
<p class="org-card__desc">{{ 'labels.text.Download groups template and Upload group excel files' | translate }}</p>
</div>
<i class="fas fa-chevron-right org-card__arrow"></i>
</a>
<!-- Loan Accounts -->
<a class="org-card" [routerLink]="['Loan Accounts']" *mifosxHasPermission="'READ_OFFICE'">
<div class="org-card__icon org-card__icon--orange"><i class="fas fa-money-bill-alt"></i></div>
<div class="org-card__body">
<h3 class="org-card__title">{{ 'labels.heading.Loan Accounts' | translate }}</h3>
<p class="org-card__desc">{{ 'labels.text.Download loan accounts template and upload loan account excel files' | translate }}</p>
</div>
<i class="fas fa-chevron-right org-card__arrow"></i>
</a>
<!-- Savings Accounts -->
<a class="org-card" [routerLink]="['Savings Accounts']" *mifosxHasPermission="'READ_OFFICE'">
<div class="org-card__icon org-card__icon--emerald"><i class="fas fa-briefcase"></i></div>
<div class="org-card__body">
<h3 class="org-card__title">{{ 'labels.heading.Savings Accounts' | translate }}</h3>
<p class="org-card__desc">{{ 'labels.text.Download savings accounts template and upload savings account excel files' | translate }}</p>
</div>
<i class="fas fa-chevron-right org-card__arrow"></i>
</a>
<!-- Fixed Deposit Accounts -->
<a class="org-card" [routerLink]="['Fixed Deposit Accounts']" *mifosxHasPermission="'READ_OFFICE'">
<div class="org-card__icon org-card__icon--teal"><i class="fas fa-briefcase"></i></div>
<div class="org-card__body">
<h3 class="org-card__title">{{ 'labels.heading.Fixed Deposit Accounts' | translate }}</h3>
<p class="org-card__desc">{{ 'labels.text.Download fixed deposit accounts template and upload fixed deposit account excel files' | translate }}</p>
</div>
<i class="fas fa-chevron-right org-card__arrow"></i>
</a>
<!-- Chart of Accounts -->
<a class="org-card" [routerLink]="['Chart of Accounts']" *mifosxHasPermission="'READ_OFFICE'">
<div class="org-card__icon org-card__icon--amber"><i class="fas fa-money-bill-alt"></i></div>
<div class="org-card__body">
<h3 class="org-card__title">{{ 'labels.heading.Chart of Accounts' | translate }}</h3>
<p class="org-card__desc">{{ 'labels.text.Download chart of accounts template and upload chart of account excel files' | translate }}</p>
</div>
<i class="fas fa-chevron-right org-card__arrow"></i>
</a>
<!-- Share Accounts -->
<a class="org-card" [routerLink]="['Share Accounts']" *mifosxHasPermission="'READ_OFFICE'">
<div class="org-card__icon org-card__icon--indigo"><i class="fas fa-briefcase"></i></div>
<div class="org-card__body">
<h3 class="org-card__title">{{ 'labels.heading.Share Accounts' | translate }}</h3>
<p class="org-card__desc">{{ 'labels.text.Download share accounts template and upload share account excel files' | translate }}</p>
</div>
<i class="fas fa-chevron-right org-card__arrow"></i>
</a>
<!-- Employees -->
<a class="org-card" [routerLink]="['Employees']" *mifosxHasPermission="'READ_OFFICE'">
<div class="org-card__icon org-card__icon--purple"><i class="fas fa-user"></i></div>
<div class="org-card__body">
<h3 class="org-card__title">{{ 'labels.heading.Employees' | translate }}</h3>
<p class="org-card__desc">{{ 'labels.text.Download loan accounts template and upload loan account excel files' | translate }}</p>
</div>
<i class="fas fa-chevron-right org-card__arrow"></i>
</a>
<!-- Clients -->
<a class="org-card" [routerLink]="['Clients']" *mifosxHasPermission="'READ_OFFICE'">
<div class="org-card__icon org-card__icon--cyan"><i class="fas fa-user"></i></div>
<div class="org-card__body">
<h3 class="org-card__title">{{ 'labels.heading.Clients' | translate }}</h3>
<p class="org-card__desc">{{ 'labels.text.Download clients template and upload clients excel files' | translate }}</p>
</div>
<i class="fas fa-chevron-right org-card__arrow"></i>
</a>
<!-- Centers -->
<a class="org-card" [routerLink]="['Centers']" *mifosxHasPermission="'READ_OFFICE'">
<div class="org-card__icon org-card__icon--green"><i class="fas fa-users"></i></div>
<div class="org-card__body">
<h3 class="org-card__title">{{ 'labels.heading.Centers' | translate }}</h3>
<p class="org-card__desc">{{ 'labels.text.Download centers template and upload centers excel files' | translate }}</p>
</div>
<i class="fas fa-chevron-right org-card__arrow"></i>
</a>
<!-- Loan Repayments -->
<a class="org-card" [routerLink]="['Loan Repayments']" *mifosxHasPermission="'READ_OFFICE'">
<div class="org-card__icon org-card__icon--rose"><i class="fas fa-briefcase"></i></div>
<div class="org-card__body">
<h3 class="org-card__title">{{ 'labels.heading.Loan Repayments' | translate }}</h3>
<p class="org-card__desc">{{ 'labels.text.Download loan repayments template and upload loan repayment excel files' | translate }}</p>
</div>
<i class="fas fa-chevron-right org-card__arrow"></i>
</a>
<!-- Savings Transactions -->
<a class="org-card" [routerLink]="['Savings Transactions']" *mifosxHasPermission="'READ_OFFICE'">
<div class="org-card__icon org-card__icon--emerald"><i class="fas fa-briefcase"></i></div>
<div class="org-card__body">
<h3 class="org-card__title">{{ 'labels.heading.Savings Transactions' | translate }}</h3>
<p class="org-card__desc">{{ 'labels.text.Download savings transactions template and upload savings transaction excel files' | translate }}</p>
</div>
<i class="fas fa-chevron-right org-card__arrow"></i>
</a>
<!-- Fixed Deposit Transactions -->
<a class="org-card" [routerLink]="['Fixed Deposit Transactions']" *mifosxHasPermission="'READ_OFFICE'">
<div class="org-card__icon org-card__icon--teal"><i class="fas fa-briefcase"></i></div>
<div class="org-card__body">
<h3 class="org-card__title">{{ 'labels.heading.Fixed Deposit Transactions' | translate }}</h3>
<p class="org-card__desc">{{ 'labels.text.Download fixed deposit transactions template and upload fixed deposit transaction excel files' | translate }}</p>
</div>
<i class="fas fa-chevron-right org-card__arrow"></i>
</a>
<!-- Recurring Deposit Transactions -->
<a class="org-card" [routerLink]="['Recurring Deposit Transactions']" *mifosxHasPermission="'READ_OFFICE'">
<div class="org-card__icon org-card__icon--amber"><i class="fas fa-briefcase"></i></div>
<div class="org-card__body">
<h3 class="org-card__title">{{ 'labels.heading.Recurring Deposit Transactions' | translate }}</h3>
<p class="org-card__desc">{{ 'labels.text.Download recurring deposit transactions template and upload recurring deposit transaction excel files' | translate }}</p>
</div>
<i class="fas fa-chevron-right org-card__arrow"></i>
</a>
<!-- Journal Entries -->
<a class="org-card" [routerLink]="['Journal Entries']" *mifosxHasPermission="'READ_OFFICE'">
<div class="org-card__icon org-card__icon--slate"><i class="fas fa-chevron-right"></i></div>
<div class="org-card__body">
<h3 class="org-card__title">{{ 'labels.heading.Journal Entries' | translate }}</h3>
<p class="org-card__desc">{{ 'labels.text.Download journal entries template and upload journal entries excel files' | translate }}</p>
</div>
<i class="fas fa-chevron-right org-card__arrow"></i>
</a>
<!-- Guarantors -->
<a class="org-card" [routerLink]="['Guarantors']" *mifosxHasPermission="'READ_OFFICE'">
<div class="org-card__icon org-card__icon--red"><i class="fas fa-chevron-right"></i></div>
<div class="org-card__body">
<h3 class="org-card__title">{{ 'labels.heading.Guarantors' | translate }}</h3>
<p class="org-card__desc">{{ 'labels.text.Download guarantors template and upload guarantor excel files' | translate }}</p>
</div>
<i class="fas fa-chevron-right org-card__arrow"></i>
</a>
</div>
</div>
@@ -5,3 +5,212 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
$border: #e2e8f0;
$gray-50: #f8fafc;
$gray-100: #f1f5f9;
$gray-400: #94a3b8;
$gray-500: #64748b;
$gray-700: #334155;
$gray-900: #0f172a;
// ── Container ──
.org-container {
max-width: 1100px;
margin: 0 auto;
padding: 24px 20px;
}
// ── Page Header ──
.org-header {
display: flex;
align-items: center;
gap: 16px;
margin-bottom: 28px;
&__icon {
width: 44px;
height: 44px;
border-radius: 10px;
background: linear-gradient(135deg, #0d3d78, #1a5276);
display: flex;
align-items: center;
justify-content: center;
color: #fff;
font-size: 18px;
flex-shrink: 0;
}
&__title {
font-size: 20px;
font-weight: 700;
color: $gray-900;
margin: 0;
letter-spacing: -0.3px;
}
&__sub {
font-size: 13px;
color: $gray-500;
margin: 2px 0 0;
}
}
// ── Card Grid ──
.org-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 12px;
@media (max-width: 768px) {
grid-template-columns: 1fr;
}
}
// ── Individual Card ──
.org-card {
display: flex;
align-items: center;
gap: 14px;
padding: 14px 16px;
background: #fff;
border: 1px solid $border;
border-radius: 10px;
text-decoration: none;
cursor: pointer;
transition: all 0.15s ease;
&:hover {
border-color: #cbd5e1;
background: $gray-50;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
.org-card__arrow {
color: $gray-700;
transform: translateX(2px);
}
}
&__icon {
width: 40px;
height: 40px;
border-radius: 9px;
display: flex;
align-items: center;
justify-content: center;
font-size: 15px;
flex-shrink: 0;
&--blue {
background: rgba(59, 130, 246, 0.1);
color: #2563eb;
}
&--amber {
background: rgba(245, 158, 11, 0.1);
color: #d97706;
}
&--green {
background: rgba(34, 197, 94, 0.1);
color: #16a34a;
}
&--emerald {
background: rgba(16, 185, 129, 0.1);
color: #059669;
}
&--purple {
background: rgba(139, 92, 246, 0.1);
color: #7c3aed;
}
&--indigo {
background: rgba(99, 102, 241, 0.1);
color: #4f46e5;
}
&--slate {
background: rgba(100, 116, 139, 0.1);
color: #475569;
}
&--orange {
background: rgba(249, 115, 22, 0.1);
color: #ea580c;
}
&--teal {
background: rgba(20, 184, 166, 0.1);
color: #0d9488;
}
&--cyan {
background: rgba(6, 182, 212, 0.1);
color: #0891b2;
}
&--rose {
background: rgba(244, 63, 94, 0.1);
color: #e11d48;
}
&--red {
background: rgba(239, 68, 68, 0.1);
color: #dc2626;
}
}
&__body {
flex: 1;
min-width: 0;
}
&__title {
font-size: 13.5px;
font-weight: 600;
color: $gray-900;
margin: 0;
line-height: 1.3;
}
&__desc {
font-size: 11.5px;
color: $gray-400;
margin: 3px 0 0;
line-height: 1.35;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
&__arrow {
font-size: 11px;
color: #cbd5e1;
flex-shrink: 0;
transition: all 0.15s ease;
}
}
// ── Dark mode ──
:host-context(.dark-theme) {
.org-header {
&__title { color: #e2e8f0; }
&__sub { color: #94a3b8; }
}
.org-card {
background: #1e1e1e;
border-color: #333;
&:hover {
background: #262626;
border-color: #444;
}
&__title { color: #e2e8f0; }
&__desc { color: #64748b; }
&__arrow { color: #444; }
}
}
@@ -8,10 +8,6 @@
/** Angular Imports */
import { Component } from '@angular/core';
import { MatNavList, MatListItem } from '@angular/material/list';
import { MatIcon } from '@angular/material/icon';
import { FaIconComponent } from '@fortawesome/angular-fontawesome';
import { MatLine } from '@angular/material/grid-list';
import { STANDALONE_SHARED_IMPORTS } from 'app/standalone-shared.module';
/**
@@ -22,27 +18,7 @@ import { STANDALONE_SHARED_IMPORTS } from 'app/standalone-shared.module';
templateUrl: './bulk-import.component.html',
styleUrls: ['./bulk-import.component.scss'],
imports: [
...STANDALONE_SHARED_IMPORTS,
MatNavList,
MatListItem,
MatIcon,
FaIconComponent,
MatLine
...STANDALONE_SHARED_IMPORTS
]
})
export class BulkImportComponent {
// Initialize an array of 17 boolean values, all set to false
arrowBooleans: boolean[] = new Array(17).fill(false);
constructor() {}
/**
* Popover function
* @param arrowNumber - The index of the boolean value to toggle.
*/
arrowBooleansToggle(arrowNumber: number) {
// Toggle the boolean value at the given index
this.arrowBooleans[arrowNumber] = !this.arrowBooleans[arrowNumber];
}
}
export class BulkImportComponent {}