-
{{ 'APP_NAME' | translate }}
-
- {{ 'labels.text.A' | translate }}
- {{ 'labels.text.global community' | translate }}
- {{ 'labels.text.elimination of poverty' | translate }}
-
-
-
-
- {{ 'labels.heading.Secure & Reliable' | translate }}
-
-
-
- {{ 'labels.heading.Community Driven' | translate }}
-
-
-
- {{ 'labels.heading.Global Impact' | translate }}
-
+
Welcome to CoIMS
+
+ Your trusted cooperative banking platform for savings, loans, share management, and seamless financial services.
+
+
+
+
+
+
+ ✓
+
+
+ Savings & Deposits
+ Manage member savings, fixed deposits, and recurring deposits
+
+
+
+
+ ✓
-
- }
-
- @if (productionMode) {
-
-
{{ 'APP_NAME' | translate }}
+
+
+ ✓
+
+
+ Share Capital
+ Track member shares, dividends, and equity contributions
+
- }
+
-
-
-
-
-
+
@if (!themeDarkEnabled) {
![{{ 'APP_NAME' | translate }} Logo]()
@@ -89,140 +65,34 @@
{{ 'APP_NAME' | translate }}
/>
}
+
Enter your credentials to access your account
-
-
-
-
-
-
-
- {{ 'labels.version.Tenant' | translate }}
- {{ tenantDisplayName }}
-
-
- {{ 'labels.version.Mifos WebApp' | translate }}
- {{ versions?.mifos }}
-
-
- {{ 'labels.version.Apache Fineract' | translate }}
- {{ versions?.fineract?.version }}
-
-
- {{ 'labels.version.Server' | translate }}
- {{ server }}
-
+
+ @if (showTenantSelector) {
+
+
-
+ }
-
- @if (!productionMode) {
-
-
-
-
-
-
-
-
+
+ @if (!resetPassword && !twoFactorAuthenticationRequired) {
+
}
-
-
-
+
+
+
-
-
-
-
-
-
-
diff --git a/src/app/login/login.component.scss b/src/app/login/login.component.scss
index 4721bd5e4f..6b28475e1a 100644
--- a/src/app/login/login.component.scss
+++ b/src/app/login/login.component.scss
@@ -1,4 +1,4 @@
-/**
+/**
* Copyright since 2025 Mifos Initiative
*
* This Source Code Form is subject to the terms of the Mozilla Public
@@ -6,149 +6,13 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-// ===
-/// ===== Version Info Section - Modern Card Style =====
-.login-version-info {
- margin-bottom: 1rem;
- width: 100%;
- display: flex;
- justify-content: center;
- align-items: center;
-}
-
-.version-info-container {
- width: 100%;
- background: var(--md-sys-color-surface-container, #f3f3f6);
- border-radius: 12px;
- padding: 0.75rem 1rem;
- border: 1px solid var(--md-sys-color-outline-variant, #c4c6d0);
-}
-
-.version-item {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 0.4rem 0;
- border-bottom: 1px solid var(--md-sys-color-outline-variant, #e0e0e0);
-
- &:last-child {
- border-bottom: none;
- }
-}
-
-.version-label {
- font-weight: 500;
- font-size: 0.75rem;
- color: var(--md-sys-color-on-surface-variant, #44474e);
- flex-shrink: 0;
-}
-
-.version-value {
- font-weight: 400;
- font-size: 0.75rem;
- color: var(--md-sys-color-on-surface, #1a1c1e);
- text-align: right;
- word-break: break-word;
- max-width: 60%;
-}
-
-// ===== Resources Branding =====
-.resources-branding {
- text-align: center;
- margin-bottom: 0.75rem;
-
- .branding-text {
- font-size: 0.8rem;
- color: var(--md-sys-color-on-surface-variant, #44474e);
- font-weight: 400;
-
- a {
- color: var(--md-sys-color-primary, #1074b9);
- text-decoration: none;
- font-weight: 500;
-
- &:hover {
- text-decoration: underline;
- }
- }
- }
-}
-
-// ===== Dark Mode Support =====
-:host-context(.dark-theme),
-:host-context([data-theme='dark']) {
- .version-info-container {
- background: var(--md-sys-color-surface-container-low, #2a2a2a);
- border-color: var(--md-sys-color-outline-variant, #3d3d3d);
- }
-
- .version-item {
- border-bottom-color: var(--md-sys-color-outline-variant, #3d3d3d);
- }
-
- .version-label {
- color: var(--md-sys-color-on-surface-variant, #c4c6cf);
- }
-
- .version-value {
- color: var(--md-sys-color-on-surface, #e2e2e5);
- }
-
- .resources-branding {
- .branding-text {
- color: var(--md-sys-color-on-surface-variant, #c4c6cf);
-
- a {
- color: var(--md-sys-color-primary, #a8c8ff);
- }
- }
- }
-
- .resource-button {
- color: var(--md-sys-color-primary, #a8c8ff);
-
- &:hover {
- background: rgb(168 200 255 / 12%);
- }
- }
-
- .login-card {
- border: 1px solid var(--md-sys-color-outline-variant, #3d3d3d);
- }
-
- .login-header {
- ::ng-deep mifosx-theme-toggle button,
- ::ng-deep mifosx-server-selector,
- ::ng-deep mifosx-language-selector {
- color: var(--md-sys-color-on-surface, #e2e2e5);
- }
- }
-
- .logo-section {
- border-bottom-color: var(--md-sys-color-outline-variant, #3d3d3d);
- }
-}
-
-// Responsive for version info
-/* stylelint-disable-next-line media-feature-range-notation -- Safari compatibility */
-@media (max-width: 768px) {
- .version-info-container {
- padding: 0.5rem 0.75rem;
- }
-
- .version-item {
- padding: 0.35rem 0;
- }
-
- .version-label,
- .version-value {
- font-size: 0.7rem;
- }
-}
-
-/**
- * Modern Material Design 3 Login Component Styles
- */
+// ===== Colors =====
+$brand-blue: #1074b9;
+$brand-blue-dark: #0a5a8f;
+$text-dark: #1e293b;
+$text-muted: #64748b;
+$input-bg: #f1f5f9;
+$input-border: #e2e8f0;
// ===== Main Wrapper =====
.login-wrapper {
@@ -156,215 +20,107 @@
min-height: 100vh;
height: 100%;
width: 100%;
- background: var(--md-sys-color-background, #fafafa);
overflow-x: hidden;
}
// ===== Hero Panel (Left Side) =====
.hero-panel {
- flex: 0 0 70%;
+ flex: 0 0 50%;
position: relative;
- background: url('../../assets/images/cover_image_resized.webp') no-repeat center center;
- background-size: cover;
overflow: hidden;
+ background:
+ linear-gradient(150deg, rgb(8 60 120 / 90%) 0%, rgb(14 90 160 / 85%) 40%, rgb(16 116 185 / 80%) 100%),
+ url('/assets/images/hero.jpg') center / cover no-repeat;
+}
- // Overlay removed for clean image view
- .hero-overlay {
- position: absolute;
- /* stylelint-disable declaration-block-no-redundant-longhand-properties -- Safari compatibility */
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- /* stylelint-enable declaration-block-no-redundant-longhand-properties */
- background: transparent;
- z-index: 1;
- }
-
- .hero-content {
- position: relative;
- z-index: 2;
- height: 100%;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- padding: 4rem;
- }
-
- .hero-text {
- max-width: 550px;
- color: #fff;
- animation: fade-in-up 0.8s ease-out;
- flex: 0 1 auto;
- // Minimal backdrop - more image visibility
- background: rgb(0 0 0 / 35%);
- border-radius: 20px;
- padding: 2rem;
- border: 1px solid rgb(255 255 255 / 15%);
- box-shadow: 0 4px 24px rgb(0 0 0 / 20%);
- }
-
- // Footer in hero panel
- mifosx-footer {
- width: 100%;
- margin-top: auto;
- padding-top: 2rem;
-
- ::ng-deep .footer-compact {
- color: rgb(255 255 255 / 90%);
- align-items: center;
- text-align: center;
-
- .footer-info {
- justify-content: center;
-
- .info-label {
- color: rgb(255 255 255 / 80%);
- font-weight: 500;
- }
-
- .info-value {
- color: rgb(255 255 255 / 95%);
- font-weight: 400;
- }
-
- .info-separator {
- color: rgb(255 255 255 / 50%);
- }
- }
+.hero-overlay {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-image:
+ radial-gradient(circle at 20% 80%, rgb(255 255 255 / 5%) 0%, transparent 50%),
+ radial-gradient(circle at 80% 20%, rgb(255 255 255 / 4%) 0%, transparent 40%);
+ z-index: 0;
+}
- .footer-copyright {
- color: rgb(255 255 255 / 75%);
- font-size: 0.875rem;
- text-align: center;
- }
- }
- }
+// ===== Hero Content =====
+.hero-content {
+ position: relative;
+ z-index: 1;
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ padding: 3.5rem;
+}
- .hero-title {
- font-size: 3.5rem;
- font-weight: 700;
- margin: 0 0 1.5rem;
- line-height: 1.2;
- letter-spacing: -0.02em;
- color: #fff;
- text-shadow:
- 0 2px 4px rgb(0 0 0 / 30%),
- 0 4px 12px rgb(0 0 0 / 15%);
- }
+.hero-title {
+ font-size: 2.5rem;
+ font-weight: 700;
+ color: #fff;
+ margin: 0 0 1rem;
+ line-height: 1.15;
+}
- .hero-subtitle {
- font-size: 1.25rem;
- line-height: 1.6;
- margin: 0 0 2rem;
- font-weight: 400;
- color: rgb(255 255 255 / 95%);
- text-shadow: 0 1px 3px rgb(0 0 0 / 40%);
- }
+.hero-subtitle {
+ font-size: 1rem;
+ font-weight: 400;
+ line-height: 1.7;
+ color: rgb(255 255 255 / 65%);
+ margin: 0 0 3rem;
+ max-width: 440px;
+}
- .hero-highlight {
- font-weight: 600;
- color: #b4d575;
- text-shadow: 0 1px 2px rgb(0 0 0 / 30%);
- }
+// ===== Feature Items =====
+.hero-features {
+ display: flex;
+ flex-direction: column;
+ gap: 1.25rem;
+ margin-top: auto;
+}
- .hero-features {
- display: flex;
- flex-direction: column;
- gap: 0.5rem;
- margin-bottom: 1.5rem;
- }
+.feature-item {
+ display: flex;
+ align-items: flex-start;
+ gap: 0.875rem;
+}
- .feature-item {
- display: flex;
- align-items: center;
- gap: 0.75rem;
- padding: 0.5rem 0;
- background: transparent;
- border-radius: 8px;
- transition: all 0.3s ease;
+.feature-check {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 28px;
+ height: 28px;
+ border-radius: 50%;
+ background: rgb(74 222 128 / 20%);
+ flex-shrink: 0;
+ margin-top: 2px;
+}
- &:hover {
- transform: translateX(4px);
- }
- }
+.check-mark {
+ font-size: 0.8rem;
+ font-weight: 700;
+ color: #4ade80;
+ line-height: 1;
+}
- .feature-icon {
- font-size: 1.25rem;
- color: #b4d575;
- filter: drop-shadow(0 1px 2px rgb(0 0 0 / 30%));
- }
+.feature-text {
+ display: flex;
+ flex-direction: column;
+ gap: 0.15rem;
- .feature-text {
+ strong {
font-size: 0.95rem;
- font-weight: 500;
- color: rgb(255 255 255 / 95%);
- text-shadow: 0 1px 2px rgb(0 0 0 / 30%);
- }
-
- .hero-links {
- display: flex;
- gap: 1rem;
- flex-wrap: wrap;
- margin-top: 0.5rem;
- }
-
- .hero-link {
+ font-weight: 600;
color: #fff;
- text-decoration: none;
- font-weight: 500;
- display: inline-flex;
- align-items: center;
- gap: 0.5rem;
- padding: 0.75rem 1.5rem;
- border: 1px solid rgb(255 255 255 / 30%);
- border-radius: 24px;
- background: rgb(255 255 255 / 10%);
- /* stylelint-disable-next-line property-no-vendor-prefix -- Safari compatibility */
- -webkit-backdrop-filter: blur(4px);
- backdrop-filter: blur(4px);
- transition: all 0.3s ease;
- text-shadow: 0 1px 2px rgb(0 0 0 / 20%);
- box-shadow: 0 2px 8px rgb(0 0 0 / 10%);
-
- &:hover {
- background: rgb(255 255 255 / 20%);
- border-color: rgb(255 255 255 / 50%);
- transform: translateY(-2px);
- box-shadow: 0 4px 16px rgb(0 0 0 / 15%);
- }
-
- fa-icon {
- opacity: 0.85;
- }
}
- // ===== Production Mode Styles =====
- &.production-mode {
- .hero-content {
- justify-content: flex-end;
- padding-bottom: 3rem;
- }
- }
-
- .hero-branding-bottom {
- animation: fade-in-up 0.8s ease-out;
- }
-
- .hero-title-minimal {
- font-size: 2.5rem;
- font-weight: 700;
- color: #fff;
- text-shadow:
- 0 2px 8px rgb(0 0 0 / 40%),
- 0 4px 16px rgb(0 0 0 / 20%);
- letter-spacing: -0.01em;
- margin: 0;
- padding: 1.5rem 2rem;
- background: rgb(0 0 0 / 30%);
- border-radius: 16px;
- border: 1px solid rgb(255 255 255 / 15%);
+ span {
+ font-size: 0.825rem;
+ color: rgb(255 255 255 / 55%);
+ line-height: 1.4;
}
}
@@ -373,197 +129,46 @@
flex: 1;
display: flex;
flex-direction: column;
- background: var(--md-sys-color-surface, #fff);
+ background: #fff;
position: relative;
- min-height: -webkit-fill-available; // Safari fix: use available height
min-height: 100vh;
overflow: hidden auto;
}
-.login-header {
- display: flex;
- align-items: center;
- gap: 0.5rem;
- padding: 0.75rem 1rem;
- background: transparent;
- flex-shrink: 0; // Safari fix: prevent header from growing
- max-height: 76px; // Safari fix: constrain header height
- flex-wrap: nowrap;
- overflow: hidden;
-
- .header-control {
- opacity: 0.8;
- transition: opacity 0.2s ease;
-
- &:hover {
- opacity: 1;
- }
- }
-
- .theme-toggle {
- flex-shrink: 0; // Prevent toggle from growing
- }
-
- // Theme Toggle Button Styles
- ::ng-deep mifosx-theme-toggle {
- button {
- color: var(--md-sys-color-on-surface, #1a1c1e);
- transition: all 0.3s ease;
-
- &:hover {
- background: #1074b914;
- color: var(--md-sys-color-primary, #1074b9);
- }
-
- mat-icon {
- font-size: 24px;
- width: 24px;
- height: 24px;
- }
- }
- }
-
- // Language Selector Outlined Styles
- ::ng-deep mifosx-language-selector {
- min-width: 80px;
- max-width: 100px;
- flex-shrink: 0; // Safari fix
-
- #language-selector.outlined-variant {
- width: 100%;
- margin: 0;
- max-height: 56px; // Safari fix: constrain height
-
- // Compact outlined field for header
- .mat-mdc-form-field-flex {
- height: 44px;
- max-height: 44px; // Safari fix
- }
-
- .mat-mdc-form-field-infix {
- padding: 10px 0;
- min-height: 44px;
- max-height: 44px; // Safari fix
- }
-
- // Rounded corners for Material Design 3
- .mdc-notched-outline {
- .mdc-notched-outline__leading {
- border-radius: 12px 0 0 12px;
- width: 12px;
- }
-
- .mdc-notched-outline__trailing {
- border-radius: 0 12px 12px 0;
- }
- }
- }
- }
-
- // Server Selector Outlined Styles
- ::ng-deep mifosx-server-selector {
- flex: 1;
- min-width: 0;
- max-width: 250px;
-
- #server-selector.outlined-variant {
- width: 100%;
- margin: 0;
- max-height: 56px; // Safari fix: constrain height
-
- // Compact outlined field for header
- .mat-mdc-form-field-flex {
- height: 44px;
- max-height: 44px; // Safari fix
- }
-
- .mat-mdc-form-field-infix {
- padding: 10px 0;
- min-height: 44px;
- max-height: 44px; // Safari fix
- }
-
- // Rounded corners for Material Design 3
- .mdc-notched-outline {
- .mdc-notched-outline__leading {
- border-radius: 12px 0 0 12px;
- width: 12px;
- }
-
- .mdc-notched-outline__trailing {
- border-radius: 0 12px 12px 0;
- }
- }
- }
- }
-}
-
-// ===== Login Card Container =====
+// ===== Login Card =====
.login-card-container {
- flex: 1 1 auto;
+ flex: 1;
display: flex;
- flex-direction: column;
align-items: center;
- justify-content: flex-start; // Safari fix: avoid center calculation issues
- padding: 0 1rem 1rem;
- min-height: 0; // Safari fix: allows flex item to shrink below content size
- animation: fade-in 0.6s ease-out;
+ justify-content: center;
+ padding: 2rem 3rem;
}
.login-card {
width: 100%;
- max-width: 480px;
- background: var(--md-sys-color-surface-container-low, #fff);
- border-radius: 28px;
- padding: 1.5rem;
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
- display: flex;
- flex-direction: column;
- margin-top: auto; // Safari fix: push card to center using margin
- margin-bottom: auto;
-
- &:hover {
- box-shadow:
- 0 2px 4px #00000014,
- 0 4px 12px #0000000f,
- 0 12px 32px #0000001f;
- }
+ max-width: 440px;
}
-// ===== Logo Section =====
.logo-section {
- text-align: center;
- margin-bottom: 0.75rem;
- padding-bottom: 0.75rem;
- border-bottom: 1px solid var(--md-sys-color-outline-variant, #e8eaed);
- flex-shrink: 0;
- animation: fade-in 0.5s ease-out 0.1s both;
+ margin-bottom: 1.25rem;
}
.logo-image {
- height: 130px;
+ height: 64px;
width: auto;
- margin: 8px 24px;
- opacity: 0.95;
- transition: opacity 0.3s ease;
-
- &:hover {
- opacity: 1;
- }
+ display: block;
}
-// ===== Form Section =====
-.form-section {
- margin-bottom: 1rem;
- flex: 0 1 auto;
- display: flex;
- flex-direction: column;
- animation: fade-in-up 0.6s ease-out 0.3s both;
+.card-subtitle {
+ font-size: 0.9rem;
+ color: $text-muted;
+ margin: 0 0 2rem;
+ line-height: 1.5;
}
+// ===== Tenant Section =====
.tenant-section {
margin-bottom: 1rem;
- flex-shrink: 0;
width: 100%;
::ng-deep mifosx-tenant-selector {
@@ -580,117 +185,192 @@
}
}
-// ===== Resources Section =====
-.resources-section {
- margin-top: auto;
- padding-top: 1rem;
- flex-shrink: 0;
- animation: fade-in-up 0.6s ease-out 0.4s both;
-}
+// ===== Override form field styles for clean rounded inputs =====
+::ng-deep {
+ .login-card {
+ // Field container - rounded gray bg, no underline
+ .mat-mdc-text-field-wrapper {
+ background: $input-bg !important;
+ border-radius: 10px !important;
+ border: 1px solid $input-border !important;
+ transition: border-color 0.2s ease;
+ }
-.resources-links {
- display: flex;
- justify-content: center;
- gap: 0.5rem;
- flex-wrap: wrap;
-}
+ .mat-focused .mat-mdc-text-field-wrapper {
+ border-color: $brand-blue !important;
+ }
+
+ // Remove underline completely
+ .mdc-line-ripple::before,
+ .mdc-line-ripple::after {
+ border-bottom: none !important;
+ }
-.resource-button {
- font-size: 0.875rem;
- color: var(--md-sys-color-primary, #1074b9);
- transition: all 0.2s ease;
+ .mat-mdc-form-field-focus-overlay {
+ display: none !important;
+ }
- fa-icon {
- margin-right: 0.4rem;
- opacity: 0.7;
- }
+ // Labels
+ .mat-mdc-floating-label {
+ color: $text-muted !important;
+ }
+
+ // Input text
+ .mat-mdc-input-element {
+ color: $text-dark !important;
+ caret-color: $brand-blue;
+
+ &::placeholder {
+ color: #94a3b8 !important;
+ }
+ }
+
+ // Prefix icons
+ .mat-mdc-form-field-icon-prefix {
+ color: $text-muted !important;
+
+ mifosx-m3-icon,
+ mat-icon {
+ color: $text-muted !important;
+ }
+ }
+
+ // Suffix icons
+ .mat-mdc-form-field-icon-suffix {
+ button,
+ mifosx-m3-icon,
+ mat-icon {
+ color: $text-muted !important;
+ }
+ }
- &:hover {
- background: #1074b914;
+ // Error messages
+ .mat-mdc-form-field-error {
+ color: #dc2626 !important;
+ }
- fa-icon {
- opacity: 1;
+ // Select
+ .mat-mdc-select {
+ color: $text-dark !important;
+ }
+
+ .mat-mdc-select-arrow {
+ color: $text-muted !important;
+ }
+
+ // Submit button - blue filled
+ .login-submit-button {
+ md-filled-button,
+ [mat-raised-button] {
+ --md-filled-button-container-color: #{$brand-blue} !important;
+ --md-filled-button-label-text-color: #fff !important;
+
+ background: $brand-blue !important;
+ color: #fff !important;
+ border-radius: 10px !important;
+ font-weight: 600 !important;
+ font-size: 0.95rem !important;
+ }
+ }
+
+ // Progress bar
+ .login-progress {
+ .mdc-linear-progress__bar-inner {
+ border-color: $brand-blue !important;
+ }
}
}
}
// ===== Footer =====
.login-footer {
- display: flex;
- align-items: center;
- justify-content: center;
- gap: 1rem;
- padding: 0.75rem 1.5rem;
- position: relative;
+ text-align: center;
+ padding: 1rem;
margin-top: auto;
- flex-shrink: 0;
+ font-size: 0.8rem;
+ color: $text-muted;
+ border-top: 1px solid $input-border;
- .reload-button {
- color: var(--mat-app-text-color, #c4c6d0);
- opacity: 0.6;
- transition: all 0.2s ease;
- background: transparent;
- border: none;
- flex-shrink: 0;
+ a {
+ color: $brand-blue;
+ text-decoration: none;
+ font-weight: 500;
&:hover {
- opacity: 1;
- transform: rotate(90deg);
+ text-decoration: underline;
}
}
}
-// ===== Modern Menus =====
-::ng-deep .modern-menu {
- border-radius: 12px;
- box-shadow:
- 0 4px 12px #0000001a,
- 0 2px 4px #0000000f;
+// ===== Version Info =====
+.login-version-info {
+ margin-bottom: 1rem;
+ width: 100%;
+ display: flex;
+ justify-content: center;
+}
- .mat-mdc-menu-item {
- border-radius: 8px;
- margin: 4px 8px;
- transition: all 0.2s ease;
+.version-info-container {
+ width: 100%;
+ background: $input-bg;
+ border-radius: 10px;
+ padding: 0.75rem 1rem;
+ border: 1px solid $input-border;
+}
- .menu-icon {
- margin-right: 0.75rem;
- color: var(--md-sys-color-primary, #1074b9);
- opacity: 0.7;
- }
+.version-item {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 0.4rem 0;
+ border-bottom: 1px solid $input-border;
- &:hover .menu-icon {
- opacity: 1;
- }
+ &:last-child {
+ border-bottom: none;
}
}
-// ===== Animations =====
-@keyframes fade-in {
- from {
- opacity: 0;
+.version-label {
+ font-weight: 500;
+ font-size: 0.75rem;
+ color: $text-muted;
+}
+
+.version-value {
+ font-weight: 400;
+ font-size: 0.75rem;
+ color: $text-dark;
+ text-align: right;
+ word-break: break-word;
+ max-width: 60%;
+}
+
+// ===== Dark Mode =====
+:host-context(.dark-theme),
+:host-context([data-theme='dark']) {
+ .login-panel {
+ background: #1e1e1e;
}
- to {
- opacity: 1;
+ .card-title {
+ color: #e2e2e5;
}
-}
-@keyframes fade-in-up {
- from {
- opacity: 0;
- transform: translateY(20px);
+ .card-subtitle {
+ color: #a0a0a0;
}
- to {
- opacity: 1;
- transform: translateY(0);
+ .login-footer {
+ color: #a0a0a0;
+ border-top-color: #333;
}
}
-@keyframes fade-in-down {
+// ===== Animations =====
+@keyframes fade-in-up {
from {
opacity: 0;
- transform: translateY(-20px);
+ transform: translateY(20px);
}
to {
@@ -699,76 +379,29 @@
}
}
-// ===== Responsive Design =====
+// ===== Responsive =====
-// Tablet
/* stylelint-disable-next-line media-feature-range-notation -- Safari compatibility */
@media (max-width: 1024px) {
.hero-panel {
display: none;
}
- .login-wrapper {
- min-height: 100vh;
- height: 100%;
- }
-
.login-panel {
flex: 1;
width: 100%;
- min-height: 100vh;
- display: flex;
- flex-direction: column;
- }
-
- .login-header {
- flex-shrink: 0;
}
.login-card-container {
- flex: 1;
- display: flex;
- flex-direction: column;
- padding: 0;
- width: 100%;
- height: 100%;
+ padding: 2rem;
}
.login-card {
- flex: 1;
- width: 100%;
- max-width: 100%;
- border-radius: 0;
- padding: 1.5rem 2rem;
- margin: 0;
- display: flex;
- flex-direction: column;
- justify-content: center;
- }
-
- .logo-section {
- flex-shrink: 0;
- }
-
- .form-section {
- flex-shrink: 0;
- }
-
- .login-version-info {
- margin-top: auto;
- }
-
- .login-footer {
- flex-shrink: 0;
- }
-
- // Hide resources section on medium screens
- .resources-section {
- display: none;
+ max-width: 440px;
+ margin: 0 auto;
}
}
-// Mobile
/* stylelint-disable-next-line media-feature-range-notation -- Safari compatibility */
@media (max-width: 768px) {
.login-wrapper {
@@ -779,142 +412,31 @@
display: none;
}
- .login-panel {
- min-height: 100vh;
- }
-
.login-card-container {
- padding: 0 1rem 1rem;
- justify-content: center;
- height: auto;
- min-height: calc(100vh - 56px); // 56px for header
- }
-
- .login-header {
- padding: 0.75rem 1rem;
- gap: 0.25rem;
-
- ::ng-deep mifosx-language-selector {
- width: 30%;
-
- #language-selector.outlined-variant {
- width: 100%;
- font-size: 0.8rem;
- }
- }
-
- ::ng-deep mifosx-server-selector {
- width: 60%;
-
- #server-selector.outlined-variant {
- width: 100%;
- font-size: 0.8rem;
- }
- }
-
- ::ng-deep mifosx-theme-toggle {
- button {
- padding: 8px;
-
- mat-icon {
- font-size: 20px;
- width: 20px;
- height: 20px;
- }
- }
- }
+ padding: 1.5rem 1rem;
}
.login-card {
- padding: 0.75rem 1rem;
- border-radius: 24px;
- margin: 0;
- }
-
- .logo-section {
- margin-bottom: 0.5rem;
- padding-bottom: 0.5rem;
- }
-
- .logo-image {
- height: 100px;
- width: auto;
- margin: 8px 20px;
- }
-
- // Hide resources section on medium and small screens
- .resources-section {
- display: none;
- }
-
- .form-section {
- margin-bottom: 0.75rem;
- }
-
- .login-version-info {
- margin-bottom: 0.75rem;
- width: 100%;
- justify-content: center;
- align-items: center;
- font-size: 0.85rem;
+ max-width: 100%;
}
.login-footer {
- flex-direction: column;
- align-items: center;
- padding: 0.5rem;
-
- mifosx-footer {
- text-align: center;
- }
-
- .reload-button {
- color: var(--md-sys-color-on-surface-variant, #c4c6d0);
- border: none;
- margin-top: 0.5rem;
- }
+ padding: 0.75rem;
}
}
-// Small mobile
/* stylelint-disable-next-line media-feature-range-notation -- Safari compatibility */
@media (max-width: 480px) {
- .login-header {
- padding: 0.5rem 0.75rem;
- gap: 0.25rem;
- }
-
.login-card-container {
- padding: 0 0.5rem 0.5rem;
- justify-content: center;
- }
-
- .login-card {
- padding: 0.75rem 0.875rem;
- }
-
- .logo-section {
- margin-bottom: 0.5rem;
- padding-bottom: 0.25rem;
+ padding: 1rem 0.75rem;
}
- .logo-image {
- height: 80px;
- width: auto;
- margin: 4px 16px;
- }
-
- .form-section {
- margin-bottom: 0.5rem;
- }
-
- // Hide resources section on small screens
- .resources-section {
- display: none;
+ .card-subtitle {
+ margin-bottom: 1.25rem;
}
.login-footer {
- padding: 0.25rem 1rem;
+ padding: 0.5rem;
}
}
diff --git a/src/app/login/login.component.ts b/src/app/login/login.component.ts
index 9e1aaac252..ab9d433d74 100644
--- a/src/app/login/login.component.ts
+++ b/src/app/login/login.component.ts
@@ -33,17 +33,11 @@ import { TranslateService } from '@ngx-translate/core';
/** Environment Imports */
import { environment } from '../../environments/environment';
import { SettingsService } from 'app/settings/settings.service';
-import { LanguageSelectorComponent } from '../shared/language-selector/language-selector.component';
-import { ThemeToggleComponent } from '../shared/theme-toggle/theme-toggle.component';
-import { ServerSelectorComponent } from '../shared/server-selector/server-selector.component';
import { TenantSelectorComponent } from '../shared/tenant-selector/tenant-selector.component';
import { LoginFormComponent } from './login-form/login-form.component';
import { ResetPasswordComponent } from './reset-password/reset-password.component';
import { TwoFactorAuthenticationComponent } from './two-factor-authentication/two-factor-authentication.component';
-import { MatMenuTrigger, MatMenu, MatMenuItem } from '@angular/material/menu';
-import { FaIconComponent } from '@fortawesome/angular-fontawesome';
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';
@@ -56,18 +50,10 @@ import { VersionService } from '../system/version.service';
styleUrls: ['./login.component.scss'],
imports: [
...STANDALONE_SHARED_IMPORTS,
- LanguageSelectorComponent,
- ThemeToggleComponent,
- ServerSelectorComponent,
TenantSelectorComponent,
LoginFormComponent,
ResetPasswordComponent,
- TwoFactorAuthenticationComponent,
- MatMenuTrigger,
- FaIconComponent,
- MatMenu,
- MatMenuItem,
- M3IconComponent
+ TwoFactorAuthenticationComponent
],
changeDetection: ChangeDetectionStrategy.OnPush
})
@@ -104,8 +90,8 @@ export class LoginComponent implements OnInit {
resetPassword = false;
/** True if user requires two factor authentication. */
twoFactorAuthenticationRequired = false;
- logoPath = 'assets/images/default_home.png';
- logoPathDark = 'assets/images/white-mifos.png';
+ logoPath = 'assets/images/debug-bg.png';
+ logoPathDark = 'assets/images/debug-bg.png';
themeDarkEnabled: boolean = false;
@@ -209,22 +195,22 @@ export class LoginComponent implements OnInit {
if (environment.tenantLogoUrl && environment.tenantLogoUrl.trim() !== '') {
this.logoPath = environment.tenantLogoUrl;
} else {
- this.logoPath = isTenantSpecific ? `assets/images/${tenant}_home.png` : 'assets/images/default_home.png';
+ this.logoPath = isTenantSpecific ? `assets/images/${tenant}_home.png` : 'assets/images/debug-bg.png';
}
// Set dark mode logo (env override takes priority)
if (environment.tenantLogoUrlDark && environment.tenantLogoUrlDark.trim() !== '') {
this.logoPathDark = environment.tenantLogoUrlDark;
} else {
- this.logoPathDark = isTenantSpecific ? `assets/images/${tenant}_home_dark.png` : 'assets/images/white-mifos.png';
+ this.logoPathDark = isTenantSpecific ? `assets/images/${tenant}_home_dark.png` : 'assets/images/debug-bg.png';
}
}
onLogoError(): void {
- this.logoPath = 'assets/images/default_home.png';
+ this.logoPath = 'assets/images/debug-bg.png';
}
onLogoErrorDark(): void {
- this.logoPathDark = 'assets/images/white-mifos.png';
+ this.logoPathDark = 'assets/images/debug-bg.png';
}
}
diff --git a/src/app/products/loan-products/common/loan-product-base.component.ts b/src/app/products/loan-products/common/loan-product-base.component.ts
index d98debe2c8..926ce43625 100644
--- a/src/app/products/loan-products/common/loan-product-base.component.ts
+++ b/src/app/products/loan-products/common/loan-product-base.component.ts
@@ -35,7 +35,7 @@ export abstract class LoanProductBaseComponent {
protected reload() {
const url: string = this.router.url.split('?')[0];
this.router
- .navigateByUrl(`/clients`, { skipLocationChange: true })
+ .navigateByUrl(`/members`, { skipLocationChange: true })
.then(() =>
this.router.navigate([url], { queryParams: { productType: this.loanProductService.productType.value } })
);
diff --git a/src/app/savings/savings-account-view/transactions-tab/transactions-tab.component.ts b/src/app/savings/savings-account-view/transactions-tab/transactions-tab.component.ts
index 6120115289..027d036949 100644
--- a/src/app/savings/savings-account-view/transactions-tab/transactions-tab.component.ts
+++ b/src/app/savings/savings-account-view/transactions-tab/transactions-tab.component.ts
@@ -290,7 +290,7 @@ export class TransactionsTabComponent implements OnInit {
const clientId = this.route.parent.parent.snapshot.params['clientId'];
const url: string = this.router.url;
this.router
- .navigateByUrl(`/clients/${clientId}/savings-accounts`, { skipLocationChange: true })
+ .navigateByUrl(`/members/${clientId}/savings-accounts`, { skipLocationChange: true })
.then(() => this.router.navigate([url]));
}
}
diff --git a/src/app/shared/account-number/account-number.component.ts b/src/app/shared/account-number/account-number.component.ts
index 7a8fe26052..c0df763b3a 100644
--- a/src/app/shared/account-number/account-number.component.ts
+++ b/src/app/shared/account-number/account-number.component.ts
@@ -53,7 +53,7 @@ export class AccountNumberComponent implements OnInit {
getAccountLink(): string {
if (this.accountType) {
- return `/#/clients/${this.clientId}/${this.getAccountType()}/${this.accountId}`;
+ return `/#/members/${this.clientId}/${this.getAccountType()}/${this.accountId}`;
}
return '';
}
diff --git a/src/app/shared/footer/footer.component.html b/src/app/shared/footer/footer.component.html
index a534f3992f..e126f8603b 100644
--- a/src/app/shared/footer/footer.component.html
+++ b/src/app/shared/footer/footer.component.html
@@ -29,56 +29,15 @@
} @else {
- @if (displayBackEndInfo) {
-
- }
+
}
diff --git a/src/app/shared/footer/footer.component.scss b/src/app/shared/footer/footer.component.scss
index 3d64d441d9..145a6c61e4 100644
--- a/src/app/shared/footer/footer.component.scss
+++ b/src/app/shared/footer/footer.component.scss
@@ -61,55 +61,33 @@
}
// ===== Default Mode (Shell) =====
-#footer {
+.footer-shell {
+ display: flex;
+ flex-direction: column;
align-items: center;
- min-width: 400px;
-
- .content-wrapper {
- max-width: 100%;
- min-width: 90%;
- padding-left: 5%;
- padding-right: 5%;
+ gap: 0.25rem;
+ padding: 1rem 0;
+ font-size: 0.8rem;
+ color: var(--md-sys-color-on-surface-variant, #44474e);
- .versions {
- width: 100%;
- color: $status-inactive;
- }
+ a {
+ color: inherit;
+ text-decoration: none;
+ font-weight: 500;
- .footer-content {
- margin: 0;
+ &:hover {
+ text-decoration: underline;
}
}
- .divider {
- margin: 2.5rem 1rem 0.5rem;
- width: 4rem;
- }
-
- .business-date {
+ .footer-business-date {
color: $status-approved;
+ font-size: 0.75rem;
}
-
- table {
- border: none;
-
- tr:nth-child(even) {
- background-color: transparent;
- }
- }
-}
-
-.main-page {
- max-width: 70%;
- min-width: 50%;
- padding-left: 30%;
}
-.copy-label {
- min-width: 100%;
- text-align: center;
- font-size: medium;
- margin-bottom: 10px;
+.dark-theme .footer-shell {
+ color: var(--md-sys-color-on-surface-variant, #c4c6d0);
}
// ===== Responsive for Compact Mode =====
diff --git a/src/app/shared/footer/footer.component.ts b/src/app/shared/footer/footer.component.ts
index d8cef4b239..1514e36f8d 100644
--- a/src/app/shared/footer/footer.component.ts
+++ b/src/app/shared/footer/footer.component.ts
@@ -76,6 +76,7 @@ export class FooterComponent implements OnInit, OnDestroy {
timer: any;
displayBackEndInfo = true;
+ currentYear = new Date().getFullYear();
constructor() {
this.displayBackEndInfo = environment.displayBackEndInfo === 'true';
diff --git a/src/app/system/manage-jobs/cob-workflow/loan-locked/loan-locked.component.ts b/src/app/system/manage-jobs/cob-workflow/loan-locked/loan-locked.component.ts
index 741cc351f1..c9f60807a8 100644
--- a/src/app/system/manage-jobs/cob-workflow/loan-locked/loan-locked.component.ts
+++ b/src/app/system/manage-jobs/cob-workflow/loan-locked/loan-locked.component.ts
@@ -172,7 +172,7 @@ export class LoanLockedComponent implements OnInit {
const loanId = loan.loanId;
this.loansService.getLoanAccountDetails(loanId).subscribe((loanData: any) => {
const clientId = loanData.clientId;
- this.router.navigateByUrl(`/clients/${clientId}/loans-accounts/${loanId}/general`);
+ this.router.navigateByUrl(`/members/${clientId}/loans-accounts/${loanId}/general`);
});
}
diff --git a/src/app/tasks/checker-inbox-and-tasks-tabs/client-approval/client-approval.component.html b/src/app/tasks/checker-inbox-and-tasks-tabs/client-approval/client-approval.component.html
index 7e5d88b271..1f78f80c18 100644
--- a/src/app/tasks/checker-inbox-and-tasks-tabs/client-approval/client-approval.component.html
+++ b/src/app/tasks/checker-inbox-and-tasks-tabs/client-approval/client-approval.component.html
@@ -55,19 +55,19 @@
{{ client.key }}
{{ 'labels.inputs.name' | translate }} |
-
+ |
{{ element.displayName }}
|
{{ 'labels.inputs.Account Number' | translate }} |
-
+ |
{{ element.accountNo }}
|
{{ 'labels.inputs.Staff' | translate }} |
-
+ |
{{ element.staffName }}
|
diff --git a/src/app/tasks/checker-inbox-and-tasks-tabs/council-approval/council-approval.component.html b/src/app/tasks/checker-inbox-and-tasks-tabs/council-approval/council-approval.component.html
index c4dbf968f5..b124b40acf 100644
--- a/src/app/tasks/checker-inbox-and-tasks-tabs/council-approval/council-approval.component.html
+++ b/src/app/tasks/checker-inbox-and-tasks-tabs/council-approval/council-approval.component.html
@@ -56,7 +56,7 @@
{{ office.name }}
mat-cell
*matCellDef="let loan"
class="view-details"
- [routerLink]="['../../clients', loan.clientId, 'general']"
+ [routerLink]="['../../members', loan.clientId, 'general']"
>
{{ loan.clientName }}
@@ -67,7 +67,7 @@
{{ office.name }}
mat-cell
*matCellDef="let loan"
class="view-details"
- [routerLink]="['../../clients', loan.clientId, 'loans-accounts', loan.id]"
+ [routerLink]="['../../members', loan.clientId, 'loans-accounts', loan.id]"
>
{{ loan.loanProductName }}({{ loan.accountNo }})
diff --git a/src/app/tasks/checker-inbox-and-tasks-tabs/loan-approval/loan-approval.component.html b/src/app/tasks/checker-inbox-and-tasks-tabs/loan-approval/loan-approval.component.html
index 901b984705..88f642e9e1 100644
--- a/src/app/tasks/checker-inbox-and-tasks-tabs/loan-approval/loan-approval.component.html
+++ b/src/app/tasks/checker-inbox-and-tasks-tabs/loan-approval/loan-approval.component.html
@@ -56,7 +56,7 @@
{{ office.name }}
mat-cell
*matCellDef="let loan"
class="view-details"
- [routerLink]="['../../clients', loan.clientId, 'general']"
+ [routerLink]="['../../members', loan.clientId, 'general']"
>
{{ loan.clientName }}
@@ -67,7 +67,7 @@
{{ office.name }}
mat-cell
*matCellDef="let loan"
class="view-details"
- [routerLink]="['../../clients', loan.clientId, 'loans-accounts', loan.id]"
+ [routerLink]="['../../members', loan.clientId, 'loans-accounts', loan.id]"
>
{{ loan.loanProductName }}({{ loan.accountNo }})
diff --git a/src/app/tasks/checker-inbox-and-tasks-tabs/loan-disbursal/loan-disbursal.component.html b/src/app/tasks/checker-inbox-and-tasks-tabs/loan-disbursal/loan-disbursal.component.html
index ab8b7b19ed..e17c9d6420 100644
--- a/src/app/tasks/checker-inbox-and-tasks-tabs/loan-disbursal/loan-disbursal.component.html
+++ b/src/app/tasks/checker-inbox-and-tasks-tabs/loan-disbursal/loan-disbursal.component.html
@@ -54,7 +54,7 @@
mat-cell
*matCellDef="let loan"
class="view-details"
- [routerLink]="['../../clients', loan.clientId, 'general']"
+ [routerLink]="['../../members', loan.clientId, 'general']"
>
{{ loan.clientName }}
@@ -65,7 +65,7 @@
mat-cell
*matCellDef="let loan"
class="view-details"
- [routerLink]="['../../clients', loan.clientId, 'loans-accounts', loan.id, 'general']"
+ [routerLink]="['../../members', loan.clientId, 'loans-accounts', loan.id, 'general']"
>
{{ loan.accountNo }}
@@ -76,7 +76,7 @@
mat-cell
*matCellDef="let loan"
class="view-details"
- [routerLink]="['../../clients', loan.clientId, 'loans-accounts', loan.id, 'general']"
+ [routerLink]="['../../members', loan.clientId, 'loans-accounts', loan.id, 'general']"
>
{{ loan.loanProductName }}
diff --git a/src/app/tasks/checker-inbox-and-tasks-tabs/reschedule-loan/reschedule-loan.component.html b/src/app/tasks/checker-inbox-and-tasks-tabs/reschedule-loan/reschedule-loan.component.html
index 7e33a461ed..604a85bb18 100644
--- a/src/app/tasks/checker-inbox-and-tasks-tabs/reschedule-loan/reschedule-loan.component.html
+++ b/src/app/tasks/checker-inbox-and-tasks-tabs/reschedule-loan/reschedule-loan.component.html
@@ -63,7 +63,7 @@
mat-cell
*matCellDef="let loan"
class="view-details"
- [routerLink]="['../../clients', loan.clientId, 'general']"
+ [routerLink]="['../../members', loan.clientId, 'general']"
>
{{ loan.clientName }}
@@ -78,7 +78,7 @@
mat-cell
*matCellDef="let loan"
class="view-details"
- [routerLink]="['../../clients', loan.clientId, 'loans', loan.loanId, 'general']"
+ [routerLink]="['../../members', loan.clientId, 'loans', loan.loanId, 'general']"
>
{{ loan.loanAccountNumber }}
diff --git a/src/app/web-app.component.ts b/src/app/web-app.component.ts
index 8783ae1561..30ae863ed5 100644
--- a/src/app/web-app.component.ts
+++ b/src/app/web-app.component.ts
@@ -188,14 +188,8 @@ export class WebAppComponent implements OnInit, OnDestroy {
mergeMap((route) => route.data),
takeUntil(this.destroy$)
)
- .subscribe((event) => {
- const title = event['title'] ? `labels.text.${event['title']}` : 'APP_NAME';
- this.i18nService
- .translate(title)
- .pipe(take(1))
- .subscribe((titleTranslated: any) => {
- this.titleService.setTitle(titleTranslated);
- });
+ .subscribe(() => {
+ this.titleService.setTitle('COIMS');
});
// Stores top 100 user activites as local storage object.
diff --git a/src/apple-touch-icon.png b/src/apple-touch-icon.png
index a9b5bc492a..f8399ba1e2 100644
Binary files a/src/apple-touch-icon.png and b/src/apple-touch-icon.png differ
diff --git a/src/assets/images/MifosX_logo.png b/src/assets/images/MifosX_logo.png
deleted file mode 100644
index 33ebffdcc1..0000000000
Binary files a/src/assets/images/MifosX_logo.png and /dev/null differ
diff --git a/src/assets/images/MifosX_logoSmall.png b/src/assets/images/MifosX_logoSmall.png
deleted file mode 100644
index dc471dfb87..0000000000
Binary files a/src/assets/images/MifosX_logoSmall.png and /dev/null differ
diff --git a/src/assets/images/cover_image_resized.webp b/src/assets/images/cover_image_resized.webp
deleted file mode 100644
index 3ea1cbe5a0..0000000000
Binary files a/src/assets/images/cover_image_resized.webp and /dev/null differ
diff --git a/src/assets/images/debug-bg.png b/src/assets/images/debug-bg.png
new file mode 100644
index 0000000000..f8399ba1e2
Binary files /dev/null and b/src/assets/images/debug-bg.png differ
diff --git a/src/assets/images/debug.png b/src/assets/images/debug.png
new file mode 100644
index 0000000000..cf3afb8966
Binary files /dev/null and b/src/assets/images/debug.png differ
diff --git a/src/assets/images/default_home.png b/src/assets/images/default_home.png
index e32d310191..cf3afb8966 100644
Binary files a/src/assets/images/default_home.png and b/src/assets/images/default_home.png differ
diff --git a/src/assets/images/hero.jpg b/src/assets/images/hero.jpg
new file mode 100644
index 0000000000..210dc7a1cf
Binary files /dev/null and b/src/assets/images/hero.jpg differ
diff --git a/src/assets/images/mifos-logo-flat.png b/src/assets/images/mifos-logo-flat.png
deleted file mode 100644
index 30a166d641..0000000000
Binary files a/src/assets/images/mifos-logo-flat.png and /dev/null differ
diff --git a/src/assets/images/mifos_lg-logo.jpg b/src/assets/images/mifos_lg-logo.jpg
deleted file mode 100644
index a067a3c8ed..0000000000
Binary files a/src/assets/images/mifos_lg-logo.jpg and /dev/null differ
diff --git a/src/assets/images/white-mifos.png b/src/assets/images/white-mifos.png
deleted file mode 100644
index 5bc3f75d37..0000000000
Binary files a/src/assets/images/white-mifos.png and /dev/null differ
diff --git a/src/assets/translations/cs-CS.json b/src/assets/translations/cs-CS.json
index f71201b9ae..3f753d9505 100644
--- a/src/assets/translations/cs-CS.json
+++ b/src/assets/translations/cs-CS.json
@@ -1,5 +1,5 @@
{
- "APP_NAME": "Mifos® X WebApp",
+ "APP_NAME": "COIMS",
"Logged in as": "Přihlášen jako",
"Remember me": "Zapamatuj si mě",
"error.resource.notImplemented.type": "Nenaimplementovaná chyba",
@@ -433,6 +433,7 @@
"version": {
"Tenant": "Instanci",
"Mifos WebApp": "Mifos® WebApp",
+ "WebApp": "WebApp",
"Apache Fineract": "Apache Fineract®",
"Server": "Server",
"Username": "Uživatelské jméno",
diff --git a/src/assets/translations/de-DE.json b/src/assets/translations/de-DE.json
index 8c8e56a520..1fe38bf4a9 100644
--- a/src/assets/translations/de-DE.json
+++ b/src/assets/translations/de-DE.json
@@ -1,5 +1,5 @@
{
- "APP_NAME": "Mifos® X WebApp",
+ "APP_NAME": "COIMS",
"Logged in as": "Angemeldet als",
"Remember me": "Erinnere dich an mich",
"error.resource.notImplemented.type": "Nicht implementierter Fehler",
@@ -434,6 +434,7 @@
"version": {
"Tenant": "Mieter",
"Mifos WebApp": "Mifos® WebApp",
+ "WebApp": "WebApp",
"Apache Fineract": "Apache Fineract®",
"Server": "Server",
"Username": "Benutzername",
@@ -4386,7 +4387,7 @@
"APPROVEADDITIONAL": "Zusätzlich genehmigen",
"ASSIGNROLE": "Rolle zuweisen",
"ASSIGNSTAFF": "Personal zuweisen",
- "ASSOCIATECLIENTS": "Clients zuordnen",
+ "ASSOCIATECLIENTS": "Members zuordnen",
"ASSOCIATEGROUPS": "Gruppen zuordnen",
"ATTACH": "Anfügen",
"BLOCK": "Blockieren",
@@ -4442,7 +4443,7 @@
"SETTLECASHFROMCASHIER": "Bargeld vom Kassier begleichen",
"SETTLECASHIER": "Kassier begleichen",
"TRANSFER": "Überweisung",
- "TRANSFERCLIENTS": "Clients übertragen",
+ "TRANSFERCLIENTS": "Members übertragen",
"UNASSIGNROLE": "Rolle entfernen",
"UNASSIGNSTAFF": "Personal entfernen",
"UNBLOCK": "Freigeben",
@@ -4484,7 +4485,7 @@
"CLIENTIDENTIFIER": "Client-Kennung",
"CLIENTIMAGE": "Client-Bild",
"CLIENT_COLLATERAL_PRODUCT": "Client-Sicherheitsprodukt",
- "CLIENTS": "Clients",
+ "CLIENTS": "Members",
"CODE": "Code",
"CODEVALUE": "Codewert",
"COLLATERAL": "Sicherheit",
diff --git a/src/assets/translations/en-US.json b/src/assets/translations/en-US.json
index 614c645bf7..26427d21eb 100644
--- a/src/assets/translations/en-US.json
+++ b/src/assets/translations/en-US.json
@@ -1,5 +1,5 @@
{
- "APP_NAME": "Mifos® X WebApp",
+ "APP_NAME": "COIMS",
"Logged in as": "Logged in as",
"Remember me": "Remember me",
"error.resource.notImplemented.type": "Not Implemented Error",
@@ -434,7 +434,8 @@
"Mifos Reporting Plugin for Eclipse Birt": "Mifos Reporting Plugin for Eclipse Birt",
"version": {
"Tenant": "Tenant",
- "Mifos WebApp": "Mifos® WebApp",
+ "Mifos WebApp": "WebApp",
+ "WebApp": "WebApp",
"Apache Fineract": "Apache Fineract®",
"Server": "Server",
"Username": "Username",
@@ -502,7 +503,7 @@
"Add": "Add",
"Add Account": "Add Account",
"Add Charge": "Add Charge",
- "Add Clients": "Add Clients",
+ "Add Clients": "Add Members",
"Add Code Value": "Add Code Value",
"Add Collateral": "Add Collateral",
"Add Column": "Add Column",
@@ -727,7 +728,7 @@
"Take Survey": "Take Survey",
"Transaction Reverted": "Transaction Reverted",
"Transfer Client": "Transfer Client",
- "Transfer Clients": "Transfer Clients",
+ "Transfer Clients": "Transfer Members",
"Unassign Staff": "Unassign Staff",
"Undo": "Undo",
"Undo Rejection": "Undo Rejection",
@@ -1189,7 +1190,7 @@
"Client Collateral Details": "Client Collateral Details",
"Client Members": "Client Members",
"Client Type": "Client Type",
- "Clients": "Clients",
+ "Clients": "Members",
"Closing Entries": "Closing Entries",
"Collateral Data": "Collateral Data",
"Collateral Management": "Collateral Management",
@@ -1490,7 +1491,7 @@
"Search bar to filter users": "Search bar to filter users",
"Secure & Reliable": "Secure & Reliable",
"Select Excel File": "Select Excel File",
- "Selected Clients": "Selected Clients",
+ "Selected Clients": "Selected Members",
"Selected Groups": "Selected Groups",
"Selected Jobs": "Selected Jobs",
"Session Timeout": "Session Timeout",
@@ -1604,7 +1605,7 @@
"Active": "Active",
"Active Client Borrowers": "Active Client Borrowers",
"Active Client Loans": "Active Client Loans",
- "Active Clients": "Active Clients",
+ "Active Clients": "Active Members",
"Active Group Borrowers": "Active Group Borrowers",
"Active Group Loans": "Active Group Loans",
"Active Overdue Client Loans": "Active Overdue Client Loans",
@@ -1615,7 +1616,7 @@
"Actual Balance": "Actual Balance",
"Actual Discount Fee Balance": "Actual Discount Fee Balance",
"Actual Payment": "Actual Payment",
- "Add Clients": "Add Clients",
+ "Add Clients": "Add Members",
"Add Fee Frequency": "Add Fee Frequency",
"Add Groups": "Add Groups",
"Add Journal Entries": "Add Journal Entries",
@@ -1805,7 +1806,7 @@
"Client last name": "Client last name",
"Client middle name": "Client middle name",
"Client name": "Client name",
- "Clients": "Clients",
+ "Clients": "Members",
"Close Date": "Close Date",
"Closed (obligations met)": "Closed (obligations met)",
"Closed (written-off)": "Closed (written-off)",
@@ -2503,11 +2504,11 @@
"Number Value": "Number Value",
"Number of Active Client Borrowers": "Number of Active Client Borrowers",
"Number of Active Client Loans": "Number of Active Client Loans",
- "Number of Active Clients": "Number of Active Clients",
+ "Number of Active Clients": "Number of Active Members",
"Number of Active Overdue Client Loans": "Number of Active Overdue Client Loans",
"Number of Active Overdue Group Loans": "Number of Active Overdue Group Loans",
"Number of Centers": "Number of Centers",
- "Number of Clients": "Number of Clients",
+ "Number of Clients": "Number of Members",
"Number of Collaterals": "Number Of Collaterals",
"Number of Days to Dormant sub-status": "Number of Days to Dormant sub-status",
"Number of Days to Escheat": "Number of Days to Escheat",
@@ -3144,7 +3145,7 @@
"Charge-Off": "Charge-Off",
"Chart of Accounts": "Chart of Accounts",
"Checker Inbox and Tasks": "Checker Inbox and Tasks",
- "Clients": "Clients",
+ "Clients": "Members",
"Close": "Close",
"Close (as Rescheduled)": "Close (as Rescheduled)",
"Collection Sheet": "Collection Sheet",
@@ -3393,8 +3394,8 @@
"ClientCreateBusinessEvent": "Client Create Business Event",
"ClientName": "ClientName",
"ClientRejectBusinessEvent": "Client Reject Business Event",
- "Clients": "Clients",
- "Clients View": "Clients View",
+ "Clients": "Members",
+ "Clients View": "Members View",
"Codes": "Codes",
"Codes are used to define drop down values": "Codes are used to define drop down values",
"Collateral": "Collateral",
@@ -3929,16 +3930,16 @@
"Scheduler Jobs can set batch jobs": "By using Scheduler Jobs, you can set batch jobs to be completed at regular intervals. From this page you can schedule, modify or delete jobs.",
"Search": "Search",
"Search Journal Entry": "Search Journal Entry",
- "Search and assign this beneficiary to an existing Mifos client account": "Search and assign this beneficiary to an existing Mifos client account",
+ "Search and assign this beneficiary to an existing Mifos member account": "Search and assign this beneficiary to an existing Mifos member account",
"Search bar to filter fixed deposit products.": "Search bar to filter fixed deposit products.",
"Search by Text": "Search by Text",
"Search by user": "Search by user",
- "SearchByClient": "Search by client name, external Id, mobile",
+ "SearchByClient": "Search by member name, external Id, mobile",
"SearchByExternalID": "Search by ExternalID",
"SearchByName": "Search by Name",
"Section Buttons": "This section contains user name, user photograph, user settings and sign out button.",
"SelectDate": "Select date",
- "SelectOrTypeClientName": "Select or type client name",
+ "SelectOrTypeClientName": "Select or type member name",
"Selection you can create new drop-downs and edit": "From this selection you can create new drop-downs and edit their values as well as edit the values for system-generated codes and drop-downs.",
"Self Service": "Self Service",
"Self Service App Configuration": "Self Service App Configuration",
@@ -4262,7 +4263,7 @@
"CLIENTIDENTIFIER": "Client Identifier",
"CLIENTIMAGE": "Client Image",
"CLIENT_COLLATERAL_PRODUCT": "Client Collateral Product",
- "CLIENTS": "Clients",
+ "CLIENTS": "Members",
"CODE": "Code",
"CODEVALUE": "Code Value",
"COLLATERAL": "Collateral",
diff --git a/src/assets/translations/es-CL.json b/src/assets/translations/es-CL.json
index 559e5c209b..e7d8433541 100644
--- a/src/assets/translations/es-CL.json
+++ b/src/assets/translations/es-CL.json
@@ -1,5 +1,5 @@
{
- "APP_NAME": "Mifos® X WebApp",
+ "APP_NAME": "COIMS",
"Logged in as": "Conectado como",
"Remember me": "Recordar me",
"errors": {
@@ -432,6 +432,7 @@
"version": {
"Tenant": "Instancia",
"Mifos WebApp": "Mifos® WebApp",
+ "WebApp": "WebApp",
"Apache Fineract": "Apache Fineract®",
"Server": "Servidor",
"Username": "Nombre de usuario",
diff --git a/src/assets/translations/es-MX.json b/src/assets/translations/es-MX.json
index 1cf2e51d4a..df2c975205 100644
--- a/src/assets/translations/es-MX.json
+++ b/src/assets/translations/es-MX.json
@@ -1,5 +1,5 @@
{
- "APP_NAME": "Mifos® X WebApp",
+ "APP_NAME": "COIMS",
"Logged in as": "Conectado como",
"Remember me": "Recordar me",
"errors": {
@@ -432,6 +432,7 @@
"version": {
"Tenant": "Instancia",
"Mifos WebApp": "Mifos® WebApp",
+ "WebApp": "WebApp",
"Apache Fineract": "Apache Fineract®",
"Server": "Servidor",
"Username": "Usuario",
diff --git a/src/assets/translations/fr-FR.json b/src/assets/translations/fr-FR.json
index ade1eaa9b7..c6cc1fae60 100644
--- a/src/assets/translations/fr-FR.json
+++ b/src/assets/translations/fr-FR.json
@@ -1,5 +1,5 @@
{
- "APP_NAME": "Mifos® X WebApp",
+ "APP_NAME": "COIMS",
"Logged in as": "connecté en tant que",
"Remember me": "Souviens-toi de moi",
"errors": {
@@ -432,6 +432,7 @@
"version": {
"Tenant": "Locataire",
"Mifos WebApp": "Mifos® WebApp",
+ "WebApp": "WebApp",
"Apache Fineract": "Apache Fineract®",
"Server": "Serveur",
"Username": "Nom d'utilisateur",
@@ -4156,7 +4157,7 @@
"CLIENTIDENTIFIER": "Identifiant client",
"CLIENTIMAGE": "Image client",
"CLIENT_COLLATERAL_PRODUCT": "Produit de garantie client",
- "CLIENTS": "Clients",
+ "CLIENTS": "Members",
"CODE": "Code",
"CODEVALUE": "Valeur de code",
"COLLATERAL": "Garantie",
diff --git a/src/assets/translations/it-IT.json b/src/assets/translations/it-IT.json
index 8c46d50665..342a87a9fa 100644
--- a/src/assets/translations/it-IT.json
+++ b/src/assets/translations/it-IT.json
@@ -1,5 +1,5 @@
{
- "APP_NAME": "Mifos® X WebApp",
+ "APP_NAME": "COIMS",
"Logged in as": "Collegato come",
"Remember me": "Ricordati di me",
"errors": {
@@ -432,6 +432,7 @@
"version": {
"Tenant": "Inquilino",
"Mifos WebApp": "Mifos® WebApp",
+ "WebApp": "WebApp",
"Apache Fineract": "Apache Fineract®",
"Server": "Server",
"Username": "Nome utente",
diff --git a/src/assets/translations/ko-KO.json b/src/assets/translations/ko-KO.json
index 3849cd2460..628ab5b7a7 100644
--- a/src/assets/translations/ko-KO.json
+++ b/src/assets/translations/ko-KO.json
@@ -1,5 +1,5 @@
{
- "APP_NAME": "Mifos® X WebApp",
+ "APP_NAME": "COIMS",
"Logged in as": "다음 계정으로 로그인됨",
"Remember me": "날 기억해",
"errors": {
@@ -432,6 +432,7 @@
"version": {
"Tenant": "임차인",
"Mifos WebApp": "Mifos® WebApp",
+ "WebApp": "WebApp",
"Apache Fineract": "Apache Fineract®",
"Server": "서버",
"Username": "사용자 이름",
diff --git a/src/assets/translations/lt-LT.json b/src/assets/translations/lt-LT.json
index b00c7e0597..4c157bef05 100644
--- a/src/assets/translations/lt-LT.json
+++ b/src/assets/translations/lt-LT.json
@@ -1,5 +1,5 @@
{
- "APP_NAME": "Mifos® X WebApp",
+ "APP_NAME": "COIMS",
"Logged in as": "prisijungęs kaip",
"Remember me": "Prisimink mane",
"errors": {
@@ -432,6 +432,7 @@
"version": {
"Tenant": "Nuomininkas",
"Mifos WebApp": "Mifos® WebApp",
+ "WebApp": "WebApp",
"Apache Fineract": "Apache Fineract®",
"Server": "Serveris",
"Username": "Vartotojo vardas",
diff --git a/src/assets/translations/lv-LV.json b/src/assets/translations/lv-LV.json
index 89b1b48f89..63b9137762 100644
--- a/src/assets/translations/lv-LV.json
+++ b/src/assets/translations/lv-LV.json
@@ -1,5 +1,5 @@
{
- "APP_NAME": "Mifos® X WebApp",
+ "APP_NAME": "COIMS",
"Logged in as": "ielogojies Kā",
"Remember me": "Atceries mani",
"errors": {
@@ -432,6 +432,7 @@
"version": {
"Tenant": "Nomnieks",
"Mifos WebApp": "Mifos® WebApp",
+ "WebApp": "WebApp",
"Apache Fineract": "Apache Fineract®",
"Server": "Serveris",
"Username": "Lietotājvārds",
diff --git a/src/assets/translations/ne-NE.json b/src/assets/translations/ne-NE.json
index 5bd741567a..b605e2a167 100644
--- a/src/assets/translations/ne-NE.json
+++ b/src/assets/translations/ne-NE.json
@@ -1,5 +1,5 @@
{
- "APP_NAME": "Mifos® X WebApp",
+ "APP_NAME": "COIMS",
"Logged in as": "को रूपमा लग इन गरियो",
"Remember me": "मलाई सम्झनुहोस्",
"errors": {
@@ -432,6 +432,7 @@
"version": {
"Tenant": "भाडामा लिने व्यक्ति",
"Mifos WebApp": "Mifos® WebApp",
+ "WebApp": "WebApp",
"Apache Fineract": "Apache Fineract®",
"Server": "सर्भर",
"Username": "प्रयोगकर्ता नाम",
diff --git a/src/assets/translations/pt-PT.json b/src/assets/translations/pt-PT.json
index c237d693ff..968cc908cb 100644
--- a/src/assets/translations/pt-PT.json
+++ b/src/assets/translations/pt-PT.json
@@ -1,5 +1,5 @@
{
- "APP_NAME": "Mifos® X WebApp",
+ "APP_NAME": "COIMS",
"Logged in as": "logado como",
"Remember me": "Lembre de mim",
"errors": {
@@ -432,6 +432,7 @@
"version": {
"Tenant": "Inquilino",
"Mifos WebApp": "Mifos® WebApp",
+ "WebApp": "WebApp",
"Apache Fineract": "Apache Fineract®",
"Server": "Servidor",
"Username": "Nome de usuário",
diff --git a/src/assets/translations/sw-SW.json b/src/assets/translations/sw-SW.json
index 2b61c54b67..b9efb6e2db 100644
--- a/src/assets/translations/sw-SW.json
+++ b/src/assets/translations/sw-SW.json
@@ -1,5 +1,5 @@
{
- "APP_NAME": "Mifos® X WebApp",
+ "APP_NAME": "COIMS",
"Logged in as": "Imeingia kama",
"Remember me": "Nikumbuke",
"errors": {
@@ -432,6 +432,7 @@
"version": {
"Tenant": "Mpangaji",
"Mifos WebApp": "Mifos® WebApp",
+ "WebApp": "WebApp",
"Apache Fineract": "Apache Fineract®",
"Server": "Seva",
"Username": "Jina la mtumiaji",
diff --git a/src/environments/.env.ts b/src/environments/.env.ts
index ff0cdf68ea..96d63cccab 100644
--- a/src/environments/.env.ts
+++ b/src/environments/.env.ts
@@ -1,9 +1,16 @@
+/**
+ * Copyright since 2025 Mifos Initiative
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * 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/.
+ */
// IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!
/* tslint:disable */
export default {
'mifos_x': {
- 'version': '260108',
- 'hash': 'g5af11fe75'
+ 'version': '260619',
+ 'hash': '070b861e'
},
'allow_switching_backend_instance': true
};
diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts
index f0ba9fbcd5..af26a78690 100644
--- a/src/environments/environment.prod.ts
+++ b/src/environments/environment.prod.ts
@@ -25,12 +25,11 @@ export const environment = {
fineractPlatformTenantId: loadedEnv['fineractPlatformTenantId'] || 'default',
fineractPlatformTenantIds: loadedEnv['fineractPlatformTenantIds'] || 'default',
// For connecting to others servers running elsewhere update the base API URL
- baseApiUrls:
- loadedEnv['fineractApiUrls'] || 'https://demo.mifos.community,https://localhost:8443,' + window.location.origin,
+ baseApiUrls: loadedEnv['fineractApiUrls'] || 'https://103.175.192.233,' + window.location.origin,
// For connecting to server running elsewhere set the base API URL
baseApiUrl:
loadedEnv['fineractApiUrl'] ||
- (loadedEnv['fineractApiUrls']?.length > 0 ? loadedEnv['fineractApiUrls'].split(',')[0] : window.location.origin),
+ (loadedEnv['fineractApiUrls']?.length > 0 ? loadedEnv['fineractApiUrls'].split(',')[0] : 'https://103.175.192.233'),
oauthServerUrl: loadedEnv['oauthServerUrl'] ?? (base && provider ? `${base}${provider}` : ''),
allowServerSwitch: loadedEnv.allowServerSwitch || 'true',
apiProvider: loadedEnv['apiProvider'] || '/fineract-provider/api',
@@ -68,8 +67,8 @@ export const environment = {
displayTenantSelector: loadedEnv['displayTenantSelector'] || 'true',
/** Production mode - when true, shows minimal hero with only branding at bottom */
productionMode: loadedEnv['productionMode'] === 'true' || loadedEnv['productionMode'] === true || false,
- tenantLogoUrl: loadedEnv['tenantLogoUrl'] || 'assets/images/default_home.png',
- tenantLogoUrlDark: loadedEnv['tenantLogoUrlDark'] || 'assets/images/white-mifos.png',
+ tenantLogoUrl: loadedEnv['tenantLogoUrl'] || 'assets/images/debug-bg.png',
+ tenantLogoUrlDark: loadedEnv['tenantLogoUrlDark'] || 'assets/images/debug-bg.png',
documentationBaseUrl: loadedEnv['documentationBaseUrl'] || 'https://mifosforge.jira.com/wiki',
// Time in seconds, default 60 seconds
waitTimeForNotifications: loadedEnv['waitTimeForNotifications'] || 60,
diff --git a/src/environments/environment.ts b/src/environments/environment.ts
index ca5335f5ad..3bb6a215bb 100644
--- a/src/environments/environment.ts
+++ b/src/environments/environment.ts
@@ -28,12 +28,11 @@ export const environment = {
fineractPlatformTenantId: loadedEnv.fineractPlatformTenantId || 'default',
fineractPlatformTenantIds: loadedEnv.fineractPlatformTenantIds || 'default',
// For connecting to others servers running elsewhere update the base API URL
- baseApiUrls:
- loadedEnv.fineractApiUrls || 'https://demo.mifos.community,https://localhost:8443,' + window.location.origin,
+ baseApiUrls: loadedEnv.fineractApiUrls || 'https://103.175.192.233,' + window.location.origin,
// For connecting to server running elsewhere set the base API URL
baseApiUrl:
loadedEnv.fineractApiUrl ||
- (loadedEnv.fineractApiUrls?.length > 0 ? loadedEnv.fineractApiUrls.split(',')[0] : window.location.origin),
+ (loadedEnv.fineractApiUrls?.length > 0 ? loadedEnv.fineractApiUrls.split(',')[0] : 'https://103.175.192.233'),
allowServerSwitch: loadedEnv.allowServerSwitch || 'true',
apiProvider: loadedEnv.apiProvider || '/fineract-provider/api',
apiVersion: loadedEnv.apiVersion || '/v1',
@@ -70,8 +69,8 @@ export const environment = {
displayTenantSelector: loadedEnv.displayTenantSelector || 'true',
/** Production mode - when true, shows minimal hero with only branding at bottom */
productionMode: loadedEnv.productionMode === 'true' || loadedEnv.productionMode === true || false,
- tenantLogoUrl: loadedEnv.tenantLogoUrl || 'assets/images/default_home.png',
- tenantLogoUrlDark: loadedEnv.tenantLogoUrlDark || 'assets/images/white-mifos.png',
+ tenantLogoUrl: loadedEnv.tenantLogoUrl || 'assets/images/debug-bg.png',
+ tenantLogoUrlDark: loadedEnv.tenantLogoUrlDark || 'assets/images/debug-bg.png',
documentationBaseUrl: loadedEnv.documentationBaseUrl || 'https://mifosforge.jira.com/wiki',
// Time in seconds, default 60 seconds
waitTimeForNotifications: loadedEnv.waitTimeForNotifications || 60,
diff --git a/src/favicon.ico b/src/favicon.ico
index a9b5bc492a..ecc4cbbfc7 100644
Binary files a/src/favicon.ico and b/src/favicon.ico differ
diff --git a/src/index.html b/src/index.html
index c9d9182df7..2913908bd3 100644
--- a/src/index.html
+++ b/src/index.html
@@ -11,14 +11,14 @@
-
{{'APP_NAME' | translate}}
+
CoIMS
-
+
@@ -104,18 +104,112 @@
});
-
-
+
+
CoIMS
+
Loading your workspace…
+
+
diff --git a/src/theme/_dark_content.scss b/src/theme/_dark_content.scss
index d3351b4243..680ef39b50 100644
--- a/src/theme/_dark_content.scss
+++ b/src/theme/_dark_content.scss
@@ -21,7 +21,7 @@
max-width: 20rem;
padding: 0;
margin: 0;
- content: url('../assets/images/white-mifos.png');
+ content: url('../assets/images/debug-bg.png');
}
.logo-section {
@@ -281,7 +281,7 @@ body.dark-theme {
mifosx-home {
[src*='mifos_lg-logo.jpg'],
[src$='_home.png'] {
- content: url('../assets/images/white-mifos.png');
+ content: url('../assets/images/debug-bg.png');
}
}