-
- Client Master
-
-
-
- CFCFRMS
-
-
- Approvals
-
-
- Cashier
-
-
-
- Clearing
-
-
-
- Deposits
-
-
-
- Advances
-
-
-
- Share
-
-
-
- NPA
-
-
-
- General Ledger
-
-
-
- Sub Ledger
-
-
+ @if (!hideShellLayout) {
+
@@ -728,6 +807,9 @@
+
@@ -1607,7 +1689,9 @@
-
-
+
+ @if (!hideShellLayout) {
+
+ }
diff --git a/src/app/core/shell/shell.component.scss b/src/app/core/shell/shell.component.scss
index b308b1cf0..3da7b166b 100644
--- a/src/app/core/shell/shell.component.scss
+++ b/src/app/core/shell/shell.component.scss
@@ -87,10 +87,72 @@ $bar: 190px;
$foo: $bar * 8;
$color: #e2e4ec;
+// ── Cashier simplified menu bar ──────────────────────────────────────────────
+.cashier-nav {
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+ gap: 2px;
+ background: #1a2744;
+ padding: 4px 12px;
+ border-bottom: 2px solid #0ea5e9;
+
+ &__item {
+ display: inline-flex;
+ align-items: center;
+ gap: 5px;
+ padding: 5px 12px;
+ border-radius: 4px;
+ font-size: 12px;
+ font-weight: 600;
+ color: #94a3b8;
+ text-decoration: none;
+ transition:
+ background 0.15s,
+ color 0.15s;
+ white-space: nowrap;
+
+ fa-icon {
+ font-size: 12px;
+ }
+
+ &:hover {
+ background: #223060;
+ color: #e2e8f0;
+ }
+
+ &--active {
+ background: #0ea5e9;
+ color: #fff;
+ }
+
+ &--primary {
+ background: #1353a0;
+ color: #fff;
+ font-weight: 700;
+
+ &:hover {
+ background: #1a6ac8;
+ }
+ }
+ }
+}
+
.sidenav {
overflow-x: hidden;
position: relative;
+ &--fullscreen {
+ margin-left: 0 !important;
+ width: 100vw !important;
+ max-width: 100vw !important;
+
+ mifosx-content {
+ padding: 0 !important;
+ margin: 0 !important;
+ }
+ }
+
// Constrain routed page content so tables/cards shrink when sidebar opens
mifosx-content {
display: block;
diff --git a/src/app/core/shell/shell.component.ts b/src/app/core/shell/shell.component.ts
index 4609ae038..fbe69a324 100644
--- a/src/app/core/shell/shell.component.ts
+++ b/src/app/core/shell/shell.component.ts
@@ -10,10 +10,12 @@
import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';
import { ChangeDetectorRef, Component, OnDestroy, OnInit, inject } from '@angular/core';
import { MatDialog } from '@angular/material/dialog';
+import { Router, NavigationEnd } from '@angular/router';
+import { AuthenticationService } from '../authentication/authentication.service';
/** rxjs Imports */
import { Observable, Subscription } from 'rxjs';
-import { map } from 'rxjs/operators';
+import { map, filter } from 'rxjs/operators';
/** Custom Services */
import { ProgressBarService } from '../progress-bar/progress-bar.service';
@@ -60,6 +62,8 @@ export class ShellComponent implements OnInit, OnDestroy {
private progressBarService = inject(ProgressBarService);
private cdr = inject(ChangeDetectorRef);
private dialog = inject(MatDialog);
+ private router = inject(Router);
+ private authService = inject(AuthenticationService);
/** Subscription to breakpoint observer for handset. */
isHandset$: Observable = this.breakpointObserver
@@ -71,6 +75,9 @@ export class ShellComponent implements OnInit, OnDestroy {
progressBarMode: string;
/** Subscription to progress bar. */
progressBar$: Subscription;
+ /** Hides nav/sidebar for full-screen cashier routes. */
+ hideShellLayout = false;
+ private routeSub: Subscription;
/** Sub Ledger mega menu state */
subLedgerOpen = false;
@@ -110,6 +117,14 @@ export class ShellComponent implements OnInit, OnDestroy {
this.progressBarMode = mode;
this.cdr.detectChanges();
});
+
+ // Cashier users: always hide shell layout (role-based, not URL-based)
+ const checkLayout = () => {
+ this.hideShellLayout = this.authService.isCashierUser();
+ this.cdr.detectChanges();
+ };
+ this.routeSub = this.router.events.pipe(filter((e) => e instanceof NavigationEnd)).subscribe(() => checkLayout());
+ setTimeout(() => checkLayout(), 0);
}
/**
@@ -257,5 +272,8 @@ export class ShellComponent implements OnInit, OnDestroy {
if (this.progressBar$) {
this.progressBar$.unsubscribe();
}
+ if (this.routeSub) {
+ this.routeSub.unsubscribe();
+ }
}
}
diff --git a/src/app/home/home.component.ts b/src/app/home/home.component.ts
index 66e68ba47..dd1ccfd03 100644
--- a/src/app/home/home.component.ts
+++ b/src/app/home/home.component.ts
@@ -99,6 +99,11 @@ export class HomeComponent implements OnInit, AfterViewInit {
* Set Form.
*/
ngOnInit() {
+ // Cashier users bypass the home dashboard entirely
+ if (this.authenticationService.isCashierUser()) {
+ this.router.navigate(['/cashier/transaction-entry'], { replaceUrl: true });
+ return;
+ }
const credentials = this.authenticationService.getCredentials();
this.username = credentials.username;
this.tenant = this.tenantIdentifier();
diff --git a/src/app/login/login.component.ts b/src/app/login/login.component.ts
index 435682c8d..807722d89 100644
--- a/src/app/login/login.component.ts
+++ b/src/app/login/login.component.ts
@@ -50,6 +50,7 @@ import { STANDALONE_SHARED_IMPORTS } from 'app/standalone-shared.module';
import { M3IconComponent } from '../shared/m3-ui/m3-icon/m3-icon.component';
import { VersionService } from '../system/version.service';
+import { AuthenticationService } from '../core/authentication/authentication.service';
/**
* Login component.
@@ -220,6 +221,7 @@ export class LoginComponent implements OnInit, OnDestroy {
private dialog = inject(MatDialog);
private twoFactorDialogRef: MatDialogRef | null = null;
private router = inject(Router);
+ private authService = inject(AuthenticationService);
private versionService = inject(VersionService);
@@ -283,7 +285,9 @@ export class LoginComponent implements OnInit, OnDestroy {
this.resetPassword = false;
this.twoFactorAuthenticationRequired = false;
this.closeTwoFactorDialog();
- this.router.navigate(['/'], { replaceUrl: true });
+ // Cashier users go directly to the full-screen transaction entry dashboard
+ const destination = this.authService.isCashierUser() ? ['/cashier/transaction-entry'] : ['/'];
+ this.router.navigate(destination, { replaceUrl: true });
} else if (alertType === 'Tenant Changed') {
this.updateLogo();
}
diff --git a/src/environments/.env.ts b/src/environments/.env.ts
index 9d0b77b96..5a1c93c7e 100644
--- a/src/environments/.env.ts
+++ b/src/environments/.env.ts
@@ -9,8 +9,8 @@
/* tslint:disable */
export default {
'mifos_x': {
- 'version': '260602',
- 'hash': '3be2f962'
+ 'version': '260603',
+ 'hash': '5f7de01b'
},
'allow_switching_backend_instance': true
};
+
+
+
+
+
-
-
-
- Accounting
-
-
- CKYC
-
-
-
- Insurance
-
-
-
- Digital
-
-
-
- HRM
-
-
-
- Admin
-
-
-
- RBI
-
-
-
- Reports
-
-
-
- Others
-
-
-
- Reconciliation
-
-
-
- Documents Hub
-
-
+
+
-
-
-
+
+
+ LIVE
+
+
-
+
+
+
+
-
-
- LIVE
-
-
+ }
+
-
-
-
-
-