diff --git a/angular.json b/angular.json
index 341741725..9f7f267f0 100644
--- a/angular.json
+++ b/angular.json
@@ -31,6 +31,8 @@
"@angular/localize/init"
],
"assets": [
+ "src/favicon.ico",
+ "src/apple-touch-icon.png",
"src/assets/images/cbsnexora-favicon.svg",
"src/robots.txt",
"src/manifest.json",
@@ -39,6 +41,11 @@
"glob": "**/*",
"input": "node_modules/tinymce",
"output": "assets/tinymce"
+ },
+ {
+ "glob": "lottie.min.js",
+ "input": "node_modules/lottie-web/build/player",
+ "output": "assets/js"
}
],
"styles": [
diff --git a/package-lock.json b/package-lock.json
index 592a9c0cf..066a39243 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -41,6 +41,7 @@
"jspdf-autotable": "^5.0.2",
"lightgallery": "^2.9.0",
"lodash": "4.17.23",
+ "lottie-web": "^5.13.0",
"moment": "^2.29.4",
"ngx-image-cropper": "^9.1.6",
"ngx-mat-select-search": "^8.0.2",
@@ -18380,6 +18381,12 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
+ "node_modules/lottie-web": {
+ "version": "5.13.0",
+ "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.13.0.tgz",
+ "integrity": "sha512-+gfBXl6sxXMPe8tKQm7qzLnUy5DUPJPKIyRHwtpCpyUEYjHYRJC/5gjUvdkuO2c3JllrPtHXH5UJJK8LRYl5yQ==",
+ "license": "MIT"
+ },
"node_modules/lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
diff --git a/package.json b/package.json
index aad5a8105..ae0ef07c2 100644
--- a/package.json
+++ b/package.json
@@ -71,6 +71,7 @@
"jspdf-autotable": "^5.0.2",
"lightgallery": "^2.9.0",
"lodash": "4.17.23",
+ "lottie-web": "^5.13.0",
"moment": "^2.29.4",
"ngx-image-cropper": "^9.1.6",
"ngx-mat-select-search": "^8.0.2",
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 2368bb912..eba0b2e26 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -97,6 +97,7 @@ import { TokenInterceptor as ZitadelTokenInterceptor } from './zitadel/token.int
import { AuthService } from './zitadel/auth.service';
import { environment } from '../environments/environment';
import { CallbackComponent } from './zitadel/callback/callback.component';
+import { LoadingScreenComponent } from './shared/loading-screen/loading-screen.component';
import { OAuthModule } from 'angular-oauth2-oidc';
export class CustomMissingTranslationHandler implements MissingTranslationHandler {
@@ -197,6 +198,7 @@ export function HttpLoaderFactory(http: HttpClient) {
AppRoutingModule,
NotFoundComponent,
CallbackComponent,
+ LoadingScreenComponent,
OAuthModule.forRoot()
],
providers: [
diff --git a/src/app/cashier/branch-day/branch-day.component.html b/src/app/cashier/branch-day/branch-day.component.html
index 57d49000e..9c13b940d 100644
--- a/src/app/cashier/branch-day/branch-day.component.html
+++ b/src/app/cashier/branch-day/branch-day.component.html
@@ -352,6 +352,51 @@
}
+
+ @if (preview?.fdInterestDue?.length) {
+
+
+ savings
+ Fixed deposit interest due today
+
+ @for (d of preview.fdInterestDue; track d.productId) {
+
+
+ {{ d.productName }} · {{ d.fdType }} · {{ d.accountCount }} deposit(s)
+ @if (d.reportStatus === 'APPROVED' || d.reportStatus === 'POSTED') {
+ {{ d.reportStatus }}
+ } @else {
+ {{ d.reportStatus === 'NONE' ? 'NO REPORT' : d.reportStatus }}
+ }
+
+ ₹{{ d.totalInterest | number: '1.2-2' }}
+
+ }
+
+ }
+ @if (preview?.fdInterestPending?.length) {
+
+
warning
+
+ The day cannot be closed yet. Fixed deposit interest is not approved for:
+ {{ preview.fdInterestPending.join(', ') }}. Approve it under Reports → FD Interest Posting Reports, then
+ close the day. The user who generated a report cannot approve it.
+
+
+ }
+ @if (preview?.savingsInterestPending?.length) {
+
+
warning
+
+ The day cannot be closed yet. Savings interest is not approved for:
+ {{ preview.savingsInterestPending.join(', ') }}. Approve it under Reports → Interest Posting Reports, then
+ close the day.
+
+
+ }
+
diff --git a/src/app/cashier/branch-day/branch-day.component.scss b/src/app/cashier/branch-day/branch-day.component.scss
index 449dfced1..e8d2b209a 100644
--- a/src/app/cashier/branch-day/branch-day.component.scss
+++ b/src/app/cashier/branch-day/branch-day.component.scss
@@ -195,6 +195,75 @@
font-size: 11px;
color: #94a3b8;
}
+
+ /* Names the block, for the interest panels that sit beside the cash arithmetic. */
+ &__head {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ margin-bottom: 6px;
+ padding-bottom: 6px;
+ border-bottom: 1px solid #e2e8f0;
+ font-size: 13px;
+ color: #0d1b2a;
+
+ mat-icon {
+ font-size: 18px;
+ width: 18px;
+ height: 18px;
+ color: #1d4ed8;
+ }
+ }
+}
+
+/* Interest is money leaving as the day closes, not cash counted in the drawer. */
+.bd-calc--fd {
+ border-left: 3px solid #1d4ed8;
+}
+
+.bd-fd-ok,
+.bd-fd-pending {
+ display: inline-block;
+ margin-left: 6px;
+ padding: 1px 7px;
+ border-radius: 999px;
+ font-size: 10px;
+ font-weight: 700;
+ letter-spacing: 0.02em;
+}
+
+.bd-fd-ok {
+ background: #dcfce7;
+ color: #15803d;
+}
+
+.bd-fd-pending {
+ background: #fef3c7;
+ color: #b45309;
+}
+
+/* Why the close will be refused, said before the count is filled in rather than after. */
+.bd-warn {
+ display: flex;
+ align-items: flex-start;
+ gap: 8px;
+ max-width: 640px;
+ margin-bottom: 14px;
+ padding: 10px 14px;
+ background: #fffbeb;
+ border: 1px solid #fcd34d;
+ border-radius: 8px;
+ font-size: 12px;
+ line-height: 1.5;
+ color: #78350f;
+
+ mat-icon {
+ flex-shrink: 0;
+ font-size: 20px;
+ width: 20px;
+ height: 20px;
+ color: #b45309;
+ }
}
.bd-hint {
diff --git a/src/app/core/shell/shell.component.html b/src/app/core/shell/shell.component.html
index cca11e73a..16e462fd8 100644
--- a/src/app/core/shell/shell.component.html
+++ b/src/app/core/shell/shell.component.html
@@ -503,7 +503,8 @@
[matMenuTriggerFor]="loanOriginationMenu"
*mifosxHasPermission="'MENU_LOAN_ORIGINATION'"
>
- Loan Origination
+ Loan Origination Loans
- General Ledger
+ General Ledger GL
- Sub Ledger
+ Sub Ledger Sub GL
@@ -583,14 +586,16 @@
[matMenuTriggerFor]="reconciliationMenu"
*mifosxHasPermission="'MENU_CONFIG_WIZARD'"
>
- Reconciliation
+ Reconciliation Recon
Cheque Book
- Documents Hub
+ Documents Hub Docs Hub
@@ -617,77 +622,89 @@
-
-
- Account Register
-
-
- All Reports
-
-
- Clients
-
-
- Loans
-
-
- Savings
-
-
- Funds
-
-
- Accounting
-
-
-
-
- Day Book & Officer Verification
-
-
- End of the Day Report
-
-
- Form 97/98 Transaction Report
-
-
- Risk Review Report
-
-
- Re-KYC Expiry & Outreach
-
-
- Inactive, Dormant & DEAF
-
-
- Savings Interest Posted
-
-
- Interest Posting Reports
-
-
- Interest Posting Summary (Branch-wise)
-
-
-
- Sanctions Screening & Alerts
-
-
- DIP / MNRL Mobile Lookups
-
-
- Deposit Interest & TDS
-
-
- TDS Remitted to Government
-
-
- BOR Register — Share Capital
-
+
+
-
-
- Day Open / Day Close
-
-
- Missed Close Register
-
-
- Vault Position
-
-
-
- Day Book & Verification
-
-
-
- End of the Day Report
-
+
+
-
-
-
- Clerk Dashboard
-
-
-
- End of the Day Report
-
-
- My Withdrawal Requests
-
-
- Disbursements & Transfer
-
-
- Dividend Dashboard
-
-
- My Vouchers
-
-
-
- System Vouchers
-
-
-
- Cashier Position
-
-
- Closing Cash Report
-
-
- Received Vouchers
-
-
- Payment Vouchers
-
+
+
+
-
-
- Cash Exchange Entry
-
-
- Cash Denomination
-
-
- Closing Cash Report
-
-
- Currency Exchange Detail
-
-
- Cash Transfer
-
-
- Excess Transaction Report
-
-
- Cash Settlement
-
-
- Inter-Cashier Transfer
-
-
- Cashier Position
-
-
- Reconciliation
-
-
- Cash History
-
-
- Day Book
-
-
- Transaction Entry
-
+
+
+
-