merging code

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Nitesh Yadav
2026-04-20 14:26:25 +05:30
co-authored by Claude Sonnet 4.6
322 changed files with 28779 additions and 4976 deletions
@@ -19,11 +19,21 @@
<div class="table-actions">
<mat-form-field class="table-search" appearance="outline">
<i matPrefix class="fas fa-search"></i>
<input matInput placeholder="{{ 'labels.inputs.Filter' | translate }}" (keyup)="applyFilter($event.target.value)" />
<input
matInput
placeholder="{{ 'labels.inputs.Filter' | translate }}"
(keyup)="applyFilter($event.target.value)"
/>
</mat-form-field>
<div class="table-buttons">
<button mat-flat-button color="primary" [routerLink]="['create']" class="btn-create" *mifosxHasPermission="'CREATE_ADHOC'">
<button
mat-flat-button
color="primary"
[routerLink]="['create']"
class="btn-create"
*mifosxHasPermission="'CREATE_ADHOC'"
>
<fa-icon icon="plus"></fa-icon>
{{ 'labels.buttons.Create AdHoc Query' | translate }}
</button>
@@ -29,7 +29,10 @@
<mat-label>{{ 'labels.inputs.name' | translate }}</mat-label>
<input matInput required formControlName="name" />
@if (adhocQueryForm.controls.name.hasError('required')) {
<mat-error>{{ 'labels.inputs.name' | translate }} {{ 'labels.commons.is' | translate }} <strong>{{ 'labels.commons.required' | translate }}</strong></mat-error>
<mat-error
>{{ 'labels.inputs.name' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong></mat-error
>
}
</mat-form-field>
@@ -37,7 +40,10 @@
<mat-label>{{ 'labels.inputs.Insert into table' | translate }}</mat-label>
<input matInput required formControlName="tableName" />
@if (adhocQueryForm.controls.tableName.hasError('required')) {
<mat-error>{{ 'labels.inputs.Insert into table' | translate }} {{ 'labels.commons.is' | translate }} <strong>{{ 'labels.commons.required' | translate }}</strong></mat-error>
<mat-error
>{{ 'labels.inputs.Insert into table' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong></mat-error
>
}
</mat-form-field>
@@ -45,7 +51,10 @@
<mat-label>{{ 'labels.inputs.SQL Query' | translate }}</mat-label>
<textarea matInput required formControlName="query" rows="3"></textarea>
@if (adhocQueryForm.controls.query.hasError('required')) {
<mat-error>{{ 'labels.inputs.SQL Query' | translate }} {{ 'labels.commons.is' | translate }} <strong>{{ 'labels.commons.required' | translate }}</strong></mat-error>
<mat-error
>{{ 'labels.inputs.SQL Query' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong></mat-error
>
}
</mat-form-field>
@@ -53,7 +62,10 @@
<mat-label>{{ 'labels.inputs.Table Fields' | translate }}</mat-label>
<textarea matInput required formControlName="tableFields" rows="2"></textarea>
@if (adhocQueryForm.controls.tableFields.hasError('required')) {
<mat-error>{{ 'labels.inputs.Table Fields' | translate }} {{ 'labels.commons.are' | translate }} <strong>{{ 'labels.commons.required' | translate }}</strong></mat-error>
<mat-error
>{{ 'labels.inputs.Table Fields' | translate }} {{ 'labels.commons.are' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong></mat-error
>
}
</mat-form-field>
</div>
@@ -70,7 +82,10 @@
<mat-label>{{ 'labels.inputs.Email' | translate }}</mat-label>
<input matInput formControlName="email" />
@if (adhocQueryForm.controls.email.hasError('email')) {
<mat-error>{{ 'labels.inputs.Email' | translate }} {{ 'labels.commons.is' | translate }} <strong>{{ 'labels.commons.invalid' | translate }}</strong></mat-error>
<mat-error
>{{ 'labels.inputs.Email' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.invalid' | translate }}</strong></mat-error
>
}
</mat-form-field>
@@ -88,10 +103,16 @@
<mat-label>{{ 'labels.inputs.Custom Report Run Frequency (Days)' | translate }}</mat-label>
<input type="number" matInput required formControlName="reportRunEvery" />
@if (adhocQueryForm.controls.reportRunEvery.hasError('required')) {
<mat-error>{{ 'labels.inputs.Custom Report Run Frequency' | translate }} {{ 'labels.commons.is' | translate }} <strong>{{ 'labels.commons.required' | translate }}</strong></mat-error>
<mat-error
>{{ 'labels.inputs.Custom Report Run Frequency' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong></mat-error
>
}
@if (adhocQueryForm.controls.reportRunEvery.hasError('min')) {
<mat-error>{{ 'labels.inputs.Custom Report Run Frequency' | translate }} <strong>{{ 'labels.commons.must be larger than 0' | translate }}</strong></mat-error>
<mat-error
>{{ 'labels.inputs.Custom Report Run Frequency' | translate }}
<strong>{{ 'labels.commons.must be larger than 0' | translate }}</strong></mat-error
>
}
</mat-form-field>
}
@@ -109,8 +130,14 @@
<button type="button" mat-stroked-button [routerLink]="['../']" class="caq-actions__cancel">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button type="submit" mat-flat-button color="primary" [disabled]="!adhocQueryForm.valid"
*mifosxHasPermission="'CREATE_ADHOC'" class="caq-actions__submit">
<button
type="submit"
mat-flat-button
color="primary"
[disabled]="!adhocQueryForm.valid"
*mifosxHasPermission="'CREATE_ADHOC'"
class="caq-actions__submit"
>
<i class="fas fa-check"></i> {{ 'labels.buttons.Submit' | translate }}
</button>
</div>
@@ -15,47 +15,129 @@ $gray-500: #9aa0a6;
$gray-700: #5f6368;
$gray-900: #202124;
.caq-container { max-width: 800px; margin: 0 auto; padding: 20px 16px; }
.caq-container {
max-width: 800px;
margin: 0 auto;
padding: 20px 16px;
}
.caq-header {
display: flex; align-items: center; gap: 14px; margin-bottom: 20px;
&__title { font-size: 18px; font-weight: 600; color: $gray-900; margin: 0; }
display: flex;
align-items: center;
gap: 14px;
margin-bottom: 20px;
&__title {
font-size: 18px;
font-weight: 600;
color: $gray-900;
margin: 0;
}
}
.caq-back {
border-radius: 8px !important; font-size: 12px !important; font-weight: 600 !important;
height: 32px !important; border-color: $border !important; color: $gray-500 !important;
i { margin-right: 6px; }
&:hover { color: $primary !important; border-color: $primary !important; }
border-radius: 8px !important;
font-size: 12px !important;
font-weight: 600 !important;
height: 32px !important;
border-color: $border !important;
color: $gray-500 !important;
i {
margin-right: 6px;
}
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
.caq-card { background: #fff; border: 1px solid $border; border-radius: 10px; overflow: hidden; }
.caq-card {
background: #fff;
border: 1px solid $border;
border-radius: 10px;
overflow: hidden;
}
.caq-section {
&__header {
display: flex; align-items: center; gap: 10px; padding: 12px 24px;
background: $gray-50; border-bottom: 1px solid $gray-200;
i { font-size: 14px; color: $accent; }
h3 { margin: 0; font-size: 14px; font-weight: 600; color: $gray-900; }
display: flex;
align-items: center;
gap: 10px;
padding: 12px 24px;
background: $gray-50;
border-bottom: 1px solid $gray-200;
i {
font-size: 14px;
color: $accent;
}
h3 {
margin: 0;
font-size: 14px;
font-weight: 600;
color: $gray-900;
}
}
& + & {
border-top: 1px solid $gray-200;
}
& + & { border-top: 1px solid $gray-200; }
}
.caq-grid {
display: grid; grid-template-columns: repeat(2, 1fr); gap: 4px 16px; padding: 16px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr; }
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px 16px;
padding: 16px 24px;
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
.caq-field {
width: 100%;
&--full { grid-column: 1 / -1; }
&--full {
grid-column: 1 / -1;
}
}
.caq-checkbox { grid-column: 1 / -1; padding: 8px 0; }
.caq-checkbox {
grid-column: 1 / -1;
padding: 8px 0;
}
.caq-actions {
display: flex; justify-content: flex-end; gap: 10px; padding: 14px 24px;
border-top: 1px solid $gray-200; background: $gray-50;
&__cancel { border-radius: 8px !important; font-size: 13px !important; font-weight: 600 !important; height: 36px !important; border-color: $border !important; color: $gray-700 !important; }
&__submit { border-radius: 8px !important; font-size: 13px !important; font-weight: 600 !important; height: 36px !important; box-shadow: 0 1px 3px rgba($primary, 0.3) !important; i { margin-right: 6px; font-size: 12px; } }
display: flex;
justify-content: flex-end;
gap: 10px;
padding: 14px 24px;
border-top: 1px solid $gray-200;
background: $gray-50;
&__cancel {
border-radius: 8px !important;
font-size: 13px !important;
font-weight: 600 !important;
height: 36px !important;
border-color: $border !important;
color: $gray-700 !important;
}
&__submit {
border-radius: 8px !important;
font-size: 13px !important;
font-weight: 600 !important;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i {
margin-right: 6px;
font-size: 12px;
}
}
}
@@ -16,7 +16,6 @@
</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>
@@ -32,7 +31,9 @@
<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>
<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>
@@ -42,7 +43,9 @@
<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>
<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>
@@ -52,7 +55,9 @@
<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>
<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>
@@ -62,7 +67,9 @@
<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>
<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>
@@ -72,7 +79,12 @@
<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>
<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>
@@ -82,7 +94,9 @@
<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>
<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>
@@ -92,7 +106,9 @@
<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>
<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>
@@ -102,7 +118,9 @@
<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>
<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>
@@ -112,7 +130,9 @@
<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>
<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>
@@ -122,7 +142,9 @@
<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>
<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>
@@ -132,7 +154,9 @@
<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>
<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>
@@ -142,7 +166,11 @@
<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>
<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>
@@ -152,7 +180,12 @@
<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>
<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>
@@ -162,7 +195,12 @@
<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>
<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>
@@ -172,7 +210,9 @@
<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>
<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>
@@ -182,10 +222,11 @@
<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>
<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>
@@ -62,7 +62,7 @@ $gray-900: #0f172a;
grid-template-columns: repeat(2, 1fr);
gap: 12px;
@media (max-width: 768px) {
@media (width <= 768px) {
grid-template-columns: 1fr;
}
}
@@ -83,7 +83,7 @@ $gray-900: #0f172a;
&:hover {
border-color: #cbd5e1;
background: $gray-50;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
box-shadow: 0 2px 8px rgb(0 0 0 / 4%);
.org-card__arrow {
color: $gray-700;
@@ -102,62 +102,62 @@ $gray-900: #0f172a;
flex-shrink: 0;
&--blue {
background: rgba(59, 130, 246, 0.1);
background: rgb(59 130 246 / 10%);
color: #2563eb;
}
&--amber {
background: rgba(245, 158, 11, 0.1);
background: rgb(245 158 11 / 10%);
color: #d97706;
}
&--green {
background: rgba(34, 197, 94, 0.1);
background: rgb(34 197 94 / 10%);
color: #16a34a;
}
&--emerald {
background: rgba(16, 185, 129, 0.1);
background: rgb(16 185 129 / 10%);
color: #059669;
}
&--purple {
background: rgba(139, 92, 246, 0.1);
background: rgb(139 92 246 / 10%);
color: #7c3aed;
}
&--indigo {
background: rgba(99, 102, 241, 0.1);
background: rgb(99 102 241 / 10%);
color: #4f46e5;
}
&--slate {
background: rgba(100, 116, 139, 0.1);
background: rgb(100 116 139 / 10%);
color: #475569;
}
&--orange {
background: rgba(249, 115, 22, 0.1);
background: rgb(249 115 22 / 10%);
color: #ea580c;
}
&--teal {
background: rgba(20, 184, 166, 0.1);
background: rgb(20 184 166 / 10%);
color: #0d9488;
}
&--cyan {
background: rgba(6, 182, 212, 0.1);
background: rgb(6 182 212 / 10%);
color: #0891b2;
}
&--rose {
background: rgba(244, 63, 94, 0.1);
background: rgb(244 63 94 / 10%);
color: #e11d48;
}
&--red {
background: rgba(239, 68, 68, 0.1);
background: rgb(239 68 68 / 10%);
color: #dc2626;
}
}
@@ -196,8 +196,13 @@ $gray-900: #0f172a;
// ── Dark mode ──
:host-context(.dark-theme) {
.org-header {
&__title { color: #e2e8f0; }
&__sub { color: #94a3b8; }
&__title {
color: #e2e8f0;
}
&__sub {
color: #94a3b8;
}
}
.org-card {
@@ -209,8 +214,16 @@ $gray-900: #0f172a;
border-color: #444;
}
&__title { color: #e2e8f0; }
&__desc { color: #64748b; }
&__arrow { color: #444; }
&__title {
color: #e2e8f0;
}
&__desc {
color: #64748b;
}
&__arrow {
color: #444;
}
}
}
@@ -57,7 +57,9 @@ $gray-900: #202124;
border: 1px solid $border;
border-radius: 12px;
padding: 0;
box-shadow: 0 1px 3px rgba(16, 24, 40, 0.06), 0 1px 2px rgba(16, 24, 40, 0.04);
box-shadow:
0 1px 3px rgb(16 24 40 / 6%),
0 1px 2px rgb(16 24 40 / 4%);
}
.bl-section {
@@ -89,7 +91,7 @@ $gray-900: #202124;
grid-template-columns: 1fr 1fr;
gap: 4px 20px;
@media (max-width: 600px) {
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
@@ -104,7 +106,7 @@ $gray-900: #202124;
grid-template-columns: 1fr 1fr;
gap: 20px;
@media (max-width: 600px) {
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
@@ -184,7 +186,7 @@ $gray-900: #202124;
font-weight: 500;
font-size: 13px;
padding: 4px 20px !important;
box-shadow: 0 1px 2px rgba(19, 83, 160, 0.15);
box-shadow: 0 1px 2px rgb(19 83 160 / 15%);
transition: all 0.2s ease;
i {
@@ -194,7 +196,7 @@ $gray-900: #202124;
&:hover {
background: #0f4688 !important;
box-shadow: 0 2px 6px rgba(19, 83, 160, 0.25);
box-shadow: 0 2px 6px rgb(19 83 160 / 25%);
}
&:disabled {
@@ -22,7 +22,13 @@
</mat-form-field>
<div class="table-buttons">
<div #buttonAddEdit class="in-block">
<button mat-flat-button color="primary" class="btn-create" [routerLink]="'manage'" *mifosxHasPermission="'UPDATE_CURRENCY'">
<button
mat-flat-button
color="primary"
class="btn-create"
[routerLink]="'manage'"
*mifosxHasPermission="'UPDATE_CURRENCY'"
>
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Add/Edit' | translate }}
</button>
@@ -15,34 +15,82 @@ $gray-500: #9aa0a6;
$gray-700: #5f6368;
$gray-900: #202124;
.mc-container { max-width: 700px; margin: 0 auto; padding: 20px 16px; }
.mc-container {
max-width: 700px;
margin: 0 auto;
padding: 20px 16px;
}
.mc-header {
display: flex; align-items: center; gap: 14px; margin-bottom: 20px;
&__title { font-size: 18px; font-weight: 600; color: $gray-900; margin: 0; }
display: flex;
align-items: center;
gap: 14px;
margin-bottom: 20px;
&__title {
font-size: 18px;
font-weight: 600;
color: $gray-900;
margin: 0;
}
}
.mc-back {
border-radius: 8px !important; font-size: 12px !important; font-weight: 600 !important;
height: 32px !important; border-color: $border !important; color: $gray-500 !important;
i { margin-right: 6px; }
&:hover { color: $primary !important; border-color: $primary !important; }
border-radius: 8px !important;
font-size: 12px !important;
font-weight: 600 !important;
height: 32px !important;
border-color: $border !important;
color: $gray-500 !important;
i {
margin-right: 6px;
}
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
.mc-card { background: #fff; border: 1px solid $border; border-radius: 10px; overflow: hidden; }
.mc-card {
background: #fff;
border: 1px solid $border;
border-radius: 10px;
overflow: hidden;
}
.mc-section {
&__header {
display: flex; align-items: center; gap: 10px; padding: 12px 24px;
background: $gray-50; border-bottom: 1px solid $gray-200;
i { font-size: 14px; color: $accent; }
h3 { margin: 0; font-size: 14px; font-weight: 600; color: $gray-900; }
display: flex;
align-items: center;
gap: 10px;
padding: 12px 24px;
background: $gray-50;
border-bottom: 1px solid $gray-200;
i {
font-size: 14px;
color: $accent;
}
h3 {
margin: 0;
font-size: 14px;
font-weight: 600;
color: $gray-900;
}
}
& + & {
border-top: 1px solid $gray-200;
}
& + & { border-top: 1px solid $gray-200; }
}
// Add currency form
.mc-add { padding: 16px 24px; }
.mc-add {
padding: 16px 24px;
}
.mc-add__form {
display: flex;
@@ -50,7 +98,10 @@ $gray-900: #202124;
gap: 12px;
}
.mc-add__field { flex: 1; width: 100%; }
.mc-add__field {
flex: 1;
width: 100%;
}
.mc-add__btn {
flex-shrink: 0;
@@ -61,11 +112,16 @@ $gray-900: #202124;
margin-top: 4px;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
// Currency list
.mc-list { padding: 8px 24px 16px; }
.mc-list {
padding: 8px 24px 16px;
}
.mc-currency {
display: flex;
@@ -73,12 +129,14 @@ $gray-900: #202124;
justify-content: space-between;
padding: 10px 14px;
background: $gray-50;
border: 1px solid rgba(0, 0, 0, 0.04);
border: 1px solid rgb(0 0 0 / 4%);
border-radius: 8px;
margin-bottom: 6px;
transition: background 0.12s;
&:hover { background: #f1f5f9; }
&:hover {
background: #f1f5f9;
}
&__info {
display: flex;
@@ -110,7 +168,9 @@ $gray-900: #202124;
line-height: 32px !important;
font-size: 13px;
&:hover { background: rgba(239, 68, 68, 0.08) !important; }
&:hover {
background: rgb(239 68 68 / 8%) !important;
}
}
}
@@ -121,6 +181,14 @@ $gray-900: #202124;
padding: 32px 16px;
color: #cbd5e1;
i { font-size: 28px; margin-bottom: 8px; }
p { font-size: 13px; color: $gray-500; margin: 0; }
i {
font-size: 28px;
margin-bottom: 8px;
}
p {
font-size: 13px;
color: $gray-500;
margin: 0;
}
}
@@ -44,9 +44,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
// Card
@@ -92,7 +97,9 @@ $gray-900: #202124;
gap: 4px 16px;
padding: 16px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr; }
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
.ce-field {
@@ -140,6 +147,9 @@ $gray-900: #202124;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
@@ -44,9 +44,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
// Card
@@ -92,7 +97,9 @@ $gray-900: #202124;
gap: 4px 16px;
padding: 16px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr; }
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
.ee-field {
@@ -140,6 +147,9 @@ $gray-900: #202124;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
@@ -24,13 +24,24 @@
</div>
<div class="table-buttons">
<div #buttonImportEmployees>
<button mat-stroked-button class="btn-import" *mifosxHasPermission="'CREATE_STAFF'" [routerLink]="['/', 'organization', 'bulk-import', 'Employees']">
<button
mat-stroked-button
class="btn-import"
*mifosxHasPermission="'CREATE_STAFF'"
[routerLink]="['/', 'organization', 'bulk-import', 'Employees']"
>
<fa-icon icon="upload" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Import Employees' | translate }}
</button>
</div>
<div #buttonCreateEmployee>
<button mat-flat-button color="primary" class="btn-create" [routerLink]="['create']" *mifosxHasPermission="'CREATE_STAFF'">
<button
mat-flat-button
color="primary"
class="btn-create"
[routerLink]="['create']"
*mifosxHasPermission="'CREATE_STAFF'"
>
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Create Employee' | translate }}
</button>
@@ -15,7 +15,13 @@
</button>
<h2 class="ve-header__title">{{ employeeData.firstname }} {{ employeeData.lastname }}</h2>
</div>
<button mat-flat-button color="primary" [routerLink]="['edit']" *mifosxHasPermission="'UPDATE_STAFF'" class="ve-header__edit">
<button
mat-flat-button
color="primary"
[routerLink]="['edit']"
*mifosxHasPermission="'UPDATE_STAFF'"
class="ve-header__edit"
>
<fa-icon icon="edit" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Edit' | translate }}
</button>
@@ -43,13 +49,9 @@
<div class="ve-cell__label">{{ 'labels.inputs.Is Loan Officer' | translate }}</div>
<div class="ve-cell__value">
@if (employeeData.isLoanOfficer) {
<span class="ve-bool ve-bool--yes">
<i class="fas fa-check"></i> Yes
</span>
<span class="ve-bool ve-bool--yes"> <i class="fas fa-check"></i> Yes </span>
} @else {
<span class="ve-bool ve-bool--no">
<i class="fas fa-times"></i> No
</span>
<span class="ve-bool ve-bool--no"> <i class="fas fa-times"></i> No </span>
}
</div>
</div>
@@ -60,9 +60,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
// Card
@@ -81,14 +86,16 @@ $gray-900: #202124;
padding: 20px 28px 24px;
background: #fff;
@media (max-width: 600px) { grid-template-columns: 1fr; }
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
.ve-cell {
padding: 14px 16px;
background: #f8fafc;
border-radius: 8px;
border: 1px solid rgba(0, 0, 0, 0.04);
border: 1px solid rgb(0 0 0 / 4%);
margin: 3px;
transition: background 0.12s;
@@ -124,12 +131,12 @@ $gray-900: #202124;
letter-spacing: 0.2px;
&--active {
background: rgba(22, 163, 74, 0.1);
background: rgb(22 163 74 / 10%);
color: #16a34a;
}
&--inactive {
background: rgba(220, 38, 38, 0.1);
background: rgb(220 38 38 / 10%);
color: #dc2626;
}
}
@@ -142,7 +149,9 @@ $gray-900: #202124;
font-weight: 600;
font-size: 13px;
i { font-size: 11px; }
i {
font-size: 11px;
}
&--yes {
color: #16a34a;
@@ -121,7 +121,13 @@
<button type="button" mat-stroked-button [routerLink]="['../']" class="ce-actions__cancel">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button type="submit" mat-flat-button color="primary" [disabled]="!createEntityForm.valid" class="ce-actions__submit">
<button
type="submit"
mat-flat-button
color="primary"
[disabled]="!createEntityForm.valid"
class="ce-actions__submit"
>
<i class="fas fa-check"></i> {{ 'labels.buttons.Submit' | translate }}
</button>
</div>
@@ -44,9 +44,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
// Card
@@ -88,7 +93,9 @@ $gray-900: #202124;
gap: 4px 16px;
padding: 16px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr; }
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
.ce-field {
@@ -120,6 +127,9 @@ $gray-900: #202124;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
@@ -19,11 +19,21 @@
<div class="table-actions">
<mat-form-field class="table-search" appearance="outline">
<i matPrefix class="fas fa-search"></i>
<input matInput placeholder="{{ 'labels.inputs.Filter' | translate }}" (keyup)="applyFilter($event.target.value)" />
<input
matInput
placeholder="{{ 'labels.inputs.Filter' | translate }}"
(keyup)="applyFilter($event.target.value)"
/>
</mat-form-field>
<div class="table-buttons">
<button mat-flat-button color="primary" [routerLink]="['create']" class="btn-create" *mifosxHasPermission="'CREATE_ENTITY_DATATABLE_CHECK'">
<button
mat-flat-button
color="primary"
[routerLink]="['create']"
class="btn-create"
*mifosxHasPermission="'CREATE_ENTITY_DATATABLE_CHECK'"
>
<fa-icon icon="plus"></fa-icon>
{{ 'labels.buttons.Create' | translate }}
</button>
@@ -136,10 +136,7 @@
<div class="fm-grid">
<!-- Loan Outstanding Percentage -->
<div class="fm-checkbox-row">
<mat-checkbox
labelPosition="before"
formControlName="includeOutStandingAmountPercentage"
>
<mat-checkbox labelPosition="before" formControlName="includeOutStandingAmountPercentage">
{{ 'labels.inputs.Loan Outstanding Percentage' | translate }}
</mat-checkbox>
</div>
@@ -228,10 +225,7 @@
<!-- Loan Outstanding Amount -->
<div class="fm-checkbox-row">
<mat-checkbox
labelPosition="before"
formControlName="includeOutstandingAmount"
>
<mat-checkbox labelPosition="before" formControlName="includeOutstandingAmount">
{{ 'labels.inputs.Loan Outstanding Amount' | translate }}
</mat-checkbox>
</div>
@@ -325,7 +319,13 @@
<button type="button" mat-stroked-button [routerLink]="['../']" class="fm-actions__cancel">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button type="submit" mat-flat-button color="primary" [disabled]="!fundMappingForm.valid" class="fm-actions__submit">
<button
type="submit"
mat-flat-button
color="primary"
[disabled]="!fundMappingForm.valid"
class="fm-actions__submit"
>
<i class="fas fa-search"></i> {{ 'labels.buttons.Summary' | translate }}
</button>
</div>
@@ -44,9 +44,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
// Card
@@ -96,10 +101,12 @@ $gray-900: #202124;
grid-template-columns: repeat(3, 1fr);
}
@media (max-width: 768px) {
@media (width <= 768px) {
grid-template-columns: 1fr;
&--3col { grid-template-columns: 1fr; }
&--3col {
grid-template-columns: 1fr;
}
}
}
@@ -127,7 +134,7 @@ $gray-900: #202124;
padding: 0 0 8px;
margin-top: -4px;
@media (max-width: 768px) {
@media (width <= 768px) {
grid-template-columns: 1fr;
}
}
@@ -157,7 +164,10 @@ $gray-900: #202124;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
@@ -44,9 +44,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
// Card
@@ -92,7 +97,9 @@ $gray-900: #202124;
gap: 4px 16px;
padding: 16px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr; }
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
.ch-field {
@@ -143,6 +150,9 @@ $gray-900: #202124;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
@@ -44,9 +44,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
// Card
@@ -92,7 +97,9 @@ $gray-900: #202124;
gap: 4px 16px;
padding: 16px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr; }
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
.eh-field {
@@ -128,6 +135,9 @@ $gray-900: #202124;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
@@ -22,7 +22,7 @@
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
</div>
<mat-form-field appearance="outline" style="min-width: 180px;">
<mat-form-field appearance="outline" style="min-width: 180px">
<mat-label>{{ 'labels.inputs.Select Office' | translate }}</mat-label>
<mat-select [formControl]="officeSelector">
@for (office of officeData; track office) {
@@ -32,7 +32,13 @@
</mat-form-field>
<div class="table-buttons">
<div #buttonCreateHoliday>
<button mat-flat-button color="primary" class="btn-create" [routerLink]="['create']" *mifosxHasPermission="'CREATE_HOLIDAY'">
<button
mat-flat-button
color="primary"
class="btn-create"
[routerLink]="['create']"
*mifosxHasPermission="'CREATE_HOLIDAY'"
>
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Create Holiday' | translate }}
</button>
@@ -52,9 +52,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
.vh-menu-btn {
@@ -85,14 +90,16 @@ $gray-900: #202124;
gap: 10px;
padding: 20px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr; }
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
.vh-cell {
padding: 14px 16px;
background: $gray-50;
border-radius: 8px;
border: 1px solid rgba(0, 0, 0, 0.04);
border: 1px solid rgb(0 0 0 / 4%);
transition: background 0.12s;
&:hover {
@@ -130,7 +137,7 @@ $gray-900: #202124;
}
// Responsive
@media (max-width: 600px) {
@media (width <= 600px) {
.vh-header {
flex-direction: column;
align-items: flex-start;
@@ -9,9 +9,7 @@
<div class="inv-container">
<!-- Header -->
<div class="inv-header">
<button mat-stroked-button [routerLink]="['../']" class="inv-back">
<i class="fas fa-arrow-left"></i> Back
</button>
<button mat-stroked-button [routerLink]="['../']" class="inv-back"><i class="fas fa-arrow-left"></i> Back</button>
<h2 class="inv-header__title">Investors</h2>
</div>
@@ -165,24 +163,40 @@
<h4 class="inv-financials__title">{{ 'labels.inputs.Details' | translate }}</h4>
<div class="inv-financials__grid">
<div class="inv-financials__row">
<span class="inv-financials__label">{{ 'labels.inputs.Principal Outstanding' | translate }}</span>
<span class="inv-financials__amount">{{ record.details.totalPrincipalOutstanding | formatNumber }}</span>
<span class="inv-financials__label">{{
'labels.inputs.Principal Outstanding' | translate
}}</span>
<span class="inv-financials__amount">{{
record.details.totalPrincipalOutstanding | formatNumber
}}</span>
</div>
<div class="inv-financials__row">
<span class="inv-financials__label">{{ 'labels.inputs.Interest Outstanding' | translate }}</span>
<span class="inv-financials__amount">{{ record.details.totalInterestOutstanding | formatNumber }}</span>
<span class="inv-financials__label">{{
'labels.inputs.Interest Outstanding' | translate
}}</span>
<span class="inv-financials__amount">{{
record.details.totalInterestOutstanding | formatNumber
}}</span>
</div>
<div class="inv-financials__row">
<span class="inv-financials__label">{{ 'labels.inputs.Fees Outstanding' | translate }}</span>
<span class="inv-financials__amount">{{ record.details.totalFeeChargesOutstanding | formatNumber }}</span>
<span class="inv-financials__amount">{{
record.details.totalFeeChargesOutstanding | formatNumber
}}</span>
</div>
<div class="inv-financials__row">
<span class="inv-financials__label">{{ 'labels.inputs.Penalties Outstanding' | translate }}</span>
<span class="inv-financials__amount">{{ record.details.totalPenaltyChargesOutstanding | formatNumber }}</span>
<span class="inv-financials__label">{{
'labels.inputs.Penalties Outstanding' | translate
}}</span>
<span class="inv-financials__amount">{{
record.details.totalPenaltyChargesOutstanding | formatNumber
}}</span>
</div>
<div class="inv-financials__row inv-financials__row--total">
<span class="inv-financials__label">{{ 'labels.inputs.Outstanding' | translate }}</span>
<span class="inv-financials__amount">{{ record.details.totalOutstanding | formatNumber }}</span>
<span class="inv-financials__amount">{{
record.details.totalOutstanding | formatNumber
}}</span>
</div>
<div class="inv-financials__row">
<span class="inv-financials__label">{{ 'labels.inputs.Overpaid' | translate }}</span>
@@ -44,9 +44,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
// Card
@@ -92,8 +97,13 @@ $gray-900: #202124;
gap: 4px 16px;
padding: 16px 24px;
@media (max-width: 768px) { grid-template-columns: 1fr; }
@media (max-width: 1024px) and (min-width: 769px) { grid-template-columns: repeat(2, 1fr); }
@media (width <= 768px) {
grid-template-columns: 1fr;
}
@media (width <= 1024px) and (width >= 769px) {
grid-template-columns: repeat(2, 1fr);
}
}
.inv-field {
@@ -105,7 +115,9 @@ $gray-900: #202124;
align-items: center;
padding-top: 4px;
@media (max-width: 768px) { padding-top: 0; }
@media (width <= 768px) {
padding-top: 0;
}
}
.inv-search-btn {
@@ -116,7 +128,10 @@ $gray-900: #202124;
width: 100%;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
// Results area
@@ -141,7 +156,9 @@ $gray-900: #202124;
}
@keyframes inv-spin {
to { transform: rotate(360deg); }
to {
transform: rotate(360deg);
}
}
// Accordion & Panels
@@ -210,7 +227,9 @@ $gray-900: #202124;
gap: 16px;
margin-bottom: 16px;
@media (max-width: 600px) { grid-template-columns: 1fr; }
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
&__item {
@@ -43,9 +43,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
.cl-card {
@@ -84,7 +89,9 @@ $gray-900: #202124;
gap: 4px 16px;
padding: 16px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr; }
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
.cl-field {
@@ -115,6 +122,9 @@ $gray-900: #202124;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
@@ -43,9 +43,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
.el-card {
@@ -84,7 +89,9 @@ $gray-900: #202124;
gap: 4px 16px;
padding: 16px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr; }
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
.el-field {
@@ -115,6 +122,9 @@ $gray-900: #202124;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
@@ -19,11 +19,23 @@
<div class="table-actions">
<mat-form-field class="table-search" appearance="outline">
<i matPrefix class="fas fa-search"></i>
<input matInput #filter placeholder="{{ 'labels.inputs.Filter' | translate }}" (keyup)="applyFilter($event.target.value)" />
<input
matInput
#filter
placeholder="{{ 'labels.inputs.Filter' | translate }}"
(keyup)="applyFilter($event.target.value)"
/>
</mat-form-field>
<div class="table-buttons">
<button mat-flat-button color="primary" [routerLink]="['create']" class="btn-create" *mifosxHasPermission="'CREATE_LOAN_ORIGINATOR'" #buttonCreateLoanOriginator>
<button
mat-flat-button
color="primary"
[routerLink]="['create']"
class="btn-create"
*mifosxHasPermission="'CREATE_LOAN_ORIGINATOR'"
#buttonCreateLoanOriginator
>
<fa-icon icon="plus"></fa-icon>
{{ 'labels.buttons.Create' | translate }} {{ 'labels.inputs.Loan Originator' | translate }}
</button>
@@ -13,7 +13,13 @@
</button>
<h2 class="vl-header__title">{{ loanOriginatorData.name }}</h2>
<div class="vl-header__spacer"></div>
<button mat-flat-button color="primary" [routerLink]="['edit']" class="vl-header__edit" *mifosxHasPermission="'UPDATE_LOAN_ORIGINATOR'">
<button
mat-flat-button
color="primary"
[routerLink]="['edit']"
class="vl-header__edit"
*mifosxHasPermission="'UPDATE_LOAN_ORIGINATOR'"
>
<i class="fas fa-pen"></i> {{ 'labels.buttons.Edit' | translate }}
</button>
</div>
@@ -45,7 +45,10 @@ $gray-900: #202124;
height: 32px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
@@ -57,9 +60,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
.vl-card {
@@ -98,7 +106,9 @@ $gray-900: #202124;
gap: 16px;
padding: 20px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr; }
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
.vl-detail {
@@ -92,7 +92,8 @@
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Liability Account' | translate }}</th>
<td mat-cell *matCellDef="let definition">
{{
(definition.liabilityAccount | find: loanProvisioningCriteriaTemplate.glAccounts : 'id' : 'name') || '-'
(definition.liabilityAccount | find: loanProvisioningCriteriaTemplate.glAccounts : 'id' : 'name') ||
'-'
}}
</td>
</ng-container>
@@ -100,7 +101,10 @@
<ng-container matColumnDef="expenseAccount">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Expense Account' | translate }}</th>
<td mat-cell *matCellDef="let definition">
{{ (definition.expenseAccount | find: loanProvisioningCriteriaTemplate.glAccounts : 'id' : 'name') || '-' }}
{{
(definition.expenseAccount | find: loanProvisioningCriteriaTemplate.glAccounts : 'id' : 'name') ||
'-'
}}
</td>
</ng-container>
@@ -46,9 +46,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
// Card
@@ -94,7 +99,9 @@ $gray-900: #202124;
gap: 4px 16px;
padding: 16px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr; }
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
.cp-field {
@@ -138,6 +145,9 @@ $gray-900: #202124;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
@@ -86,8 +86,8 @@
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Liability Account' | translate }}</th>
<td mat-cell *matCellDef="let definition">
{{
(definition.liabilityAccount | find: loanProvisioningCriteriaAndTemplate.glAccounts : 'id' : 'name') ||
'-'
(definition.liabilityAccount
| find: loanProvisioningCriteriaAndTemplate.glAccounts : 'id' : 'name') || '-'
}}
</td>
</ng-container>
@@ -96,7 +96,8 @@
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Expense Account' | translate }}</th>
<td mat-cell *matCellDef="let definition">
{{
(definition.expenseAccount | find: loanProvisioningCriteriaAndTemplate.glAccounts : 'id' : 'name') || '-'
(definition.expenseAccount
| find: loanProvisioningCriteriaAndTemplate.glAccounts : 'id' : 'name') || '-'
}}
</td>
</ng-container>
@@ -46,9 +46,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
// Card
@@ -94,7 +99,9 @@ $gray-900: #202124;
gap: 4px 16px;
padding: 16px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr; }
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
.ep-field {
@@ -138,6 +145,9 @@ $gray-900: #202124;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
@@ -19,11 +19,21 @@
<div class="table-actions">
<mat-form-field class="table-search" appearance="outline">
<i matPrefix class="fas fa-search"></i>
<input matInput placeholder="{{ 'labels.inputs.Filter' | translate }}" (keyup)="applyFilter($event.target.value)" />
<input
matInput
placeholder="{{ 'labels.inputs.Filter' | translate }}"
(keyup)="applyFilter($event.target.value)"
/>
</mat-form-field>
<div class="table-buttons">
<button mat-flat-button color="primary" [routerLink]="['create']" class="btn-create" *mifosxHasPermission="'CREATE_PROVISIONING_CRITERIA'">
<button
mat-flat-button
color="primary"
[routerLink]="['create']"
class="btn-create"
*mifosxHasPermission="'CREATE_PROVISIONING_CRITERIA'"
>
<fa-icon icon="plus"></fa-icon>
{{ 'labels.buttons.Create Provisioning Criteria' | translate }}
</button>
@@ -45,7 +55,12 @@
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns" [routerLink]="[row.criteriaId]" class="table-row"></tr>
<tr
mat-row
*matRowDef="let row; columns: displayedColumns"
[routerLink]="[row.criteriaId]"
class="table-row"
></tr>
</table>
<mat-paginator [pageSizeOptions]="[10, 25, 50, 100]" showFirstLastButtons></mat-paginator>
@@ -44,7 +44,14 @@
<button type="button" mat-stroked-button [routerLink]="['../']" class="cf-actions__cancel">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button type="submit" mat-flat-button color="primary" [disabled]="!fundForm.valid" class="cf-actions__submit" *mifosxHasPermission="'CREATE_FUND'">
<button
type="submit"
mat-flat-button
color="primary"
[disabled]="!fundForm.valid"
class="cf-actions__submit"
*mifosxHasPermission="'CREATE_FUND'"
>
<i class="fas fa-check"></i> {{ 'labels.buttons.Submit' | translate }}
</button>
</div>
@@ -43,9 +43,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
.cf-card {
@@ -84,7 +89,9 @@ $gray-900: #202124;
gap: 4px 16px;
padding: 16px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr; }
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
.cf-field {
@@ -115,6 +122,9 @@ $gray-900: #202124;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
@@ -44,7 +44,14 @@
<button type="button" mat-stroked-button [routerLink]="['../']" class="ef-actions__cancel">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button type="submit" mat-flat-button color="primary" [disabled]="!fundForm.valid" class="ef-actions__submit" *mifosxHasPermission="'UPDATE_FUND'">
<button
type="submit"
mat-flat-button
color="primary"
[disabled]="!fundForm.valid"
class="ef-actions__submit"
*mifosxHasPermission="'UPDATE_FUND'"
>
<i class="fas fa-check"></i> {{ 'labels.buttons.Submit' | translate }}
</button>
</div>
@@ -43,9 +43,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
.ef-card {
@@ -84,7 +89,9 @@ $gray-900: #202124;
gap: 4px 16px;
padding: 16px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr; }
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
.ef-field {
@@ -115,6 +122,9 @@ $gray-900: #202124;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
@@ -22,7 +22,13 @@
</mat-form-field>
<div class="table-buttons">
<div #fundFormRef class="in-block">
<button mat-flat-button color="primary" class="btn-create" [routerLink]="['create']" *mifosxHasPermission="'CREATE_FUND'">
<button
mat-flat-button
color="primary"
class="btn-create"
[routerLink]="['create']"
*mifosxHasPermission="'CREATE_FUND'"
>
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Create Fund' | translate }}
</button>
@@ -13,7 +13,13 @@
</button>
<h2 class="vf-header__title">{{ fundData.name }}</h2>
<div class="vf-header__spacer"></div>
<button mat-flat-button color="primary" [routerLink]="['edit']" class="vf-header__edit" *mifosxHasPermission="'UPDATE_FUND'">
<button
mat-flat-button
color="primary"
[routerLink]="['edit']"
class="vf-header__edit"
*mifosxHasPermission="'UPDATE_FUND'"
>
<i class="fas fa-pen"></i> {{ 'labels.buttons.Edit' | translate }}
</button>
</div>
@@ -45,7 +45,10 @@ $gray-900: #202124;
height: 32px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
@@ -57,9 +60,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
.vf-card {
@@ -98,7 +106,9 @@ $gray-900: #202124;
gap: 16px;
padding: 20px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr; }
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
.vf-detail {
@@ -85,7 +85,14 @@
<button type="button" mat-stroked-button [routerLink]="['../']" class="co-actions__cancel">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button type="submit" mat-flat-button color="primary" [disabled]="!officeForm.valid" class="co-actions__submit" *mifosxHasPermission="'CREATE_OFFICE'">
<button
type="submit"
mat-flat-button
color="primary"
[disabled]="!officeForm.valid"
class="co-actions__submit"
*mifosxHasPermission="'CREATE_OFFICE'"
>
<i class="fas fa-check"></i> {{ 'labels.buttons.Submit' | translate }}
</button>
</div>
@@ -44,9 +44,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
// Card
@@ -92,7 +97,9 @@ $gray-900: #202124;
gap: 4px 16px;
padding: 16px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr; }
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
.co-field {
@@ -128,6 +135,9 @@ $gray-900: #202124;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
@@ -87,7 +87,14 @@
<button type="button" mat-stroked-button [routerLink]="['../general']" class="eo-actions__cancel">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button type="submit" mat-flat-button color="primary" [disabled]="!officeForm.valid" class="eo-actions__submit" *mifosxHasPermission="'UPDATE_OFFICE'">
<button
type="submit"
mat-flat-button
color="primary"
[disabled]="!officeForm.valid"
class="eo-actions__submit"
*mifosxHasPermission="'UPDATE_OFFICE'"
>
<i class="fas fa-check"></i> {{ 'labels.buttons.Submit' | translate }}
</button>
</div>
@@ -44,9 +44,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
// Card
@@ -92,7 +97,9 @@ $gray-900: #202124;
gap: 4px 16px;
padding: 16px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr; }
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
.eo-field {
@@ -128,6 +135,9 @@ $gray-900: #202124;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
@@ -32,13 +32,24 @@
</mat-button-toggle-group>
<div class="table-buttons">
<div #buttonImportOffices>
<button mat-stroked-button class="btn-import" *mifosxHasPermission="'CREATE_OFFICE'" [routerLink]="['/organization', 'bulk-import', 'Offices']">
<button
mat-stroked-button
class="btn-import"
*mifosxHasPermission="'CREATE_OFFICE'"
[routerLink]="['/organization', 'bulk-import', 'Offices']"
>
<fa-icon icon="upload" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Import Offices' | translate }}
</button>
</div>
<div #buttonCreateOffice>
<button mat-flat-button color="primary" class="btn-create" [routerLink]="['create']" *mifosxHasPermission="'CREATE_OFFICE'">
<button
mat-flat-button
color="primary"
class="btn-create"
[routerLink]="['create']"
*mifosxHasPermission="'CREATE_OFFICE'"
>
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Create Office' | translate }}
</button>
@@ -72,7 +83,12 @@
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns" class="table-row" [routerLink]="[row.id, 'general']"></tr>
<tr
mat-row
*matRowDef="let row; columns: displayedColumns"
class="table-row"
[routerLink]="[row.id, 'general']"
></tr>
</table>
<mat-paginator [pageSizeOptions]="[10, 25, 50, 100]" showFirstLastButtons></mat-paginator>
</div>
@@ -15,7 +15,9 @@
<div class="gt-cell">
<div class="gt-cell__label">{{ 'labels.inputs.Opened On' | translate }}</div>
<div class="gt-cell__value">{{ officeData.openingDate ? (officeData.openingDate | dateFormat) : 'Unassigned' }}</div>
<div class="gt-cell__value">
{{ officeData.openingDate ? (officeData.openingDate | dateFormat) : 'Unassigned' }}
</div>
</div>
<div class="gt-cell">
@@ -25,14 +25,16 @@ $gray-900: #202124;
grid-template-columns: repeat(2, 1fr);
gap: 10px;
@media (max-width: 600px) { grid-template-columns: 1fr; }
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
.gt-cell {
padding: 14px 16px;
background: $gray-50;
border-radius: 8px;
border: 1px solid rgba(0, 0, 0, 0.04);
border: 1px solid rgb(0 0 0 / 4%);
transition: background 0.12s;
&:hover {
@@ -15,7 +15,13 @@
</button>
<h2 class="vo-header__title">{{ 'labels.heading.Office Details' | translate }}</h2>
</div>
<button mat-flat-button color="primary" [routerLink]="['./edit']" class="vo-edit-btn" *mifosxHasPermission="'UPDATE_OFFICE'">
<button
mat-flat-button
color="primary"
[routerLink]="['./edit']"
class="vo-edit-btn"
*mifosxHasPermission="'UPDATE_OFFICE'"
>
<fa-icon icon="edit" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Edit' | translate }}
</button>
@@ -52,9 +52,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
.vo-edit-btn {
@@ -92,7 +97,7 @@ $gray-900: #202124;
}
// Responsive
@media (max-width: 600px) {
@media (width <= 600px) {
.vo-header {
flex-direction: column;
align-items: flex-start;
@@ -98,7 +98,9 @@
</div>
<div class="org-card__body">
<h3 class="org-card__title">{{ 'labels.heading.Manage Loan Originators' | translate }}</h3>
<p class="org-card__desc">{{ 'labels.text.Loan Originators are associated with loan accounts' | translate }}</p>
<p class="org-card__desc">
{{ 'labels.text.Loan Originators are associated with loan accounts' | translate }}
</p>
</div>
<i class="fas fa-chevron-right org-card__arrow"></i>
</a>
@@ -106,7 +108,11 @@
<!-- Standing Instructions History -->
<div #standinginstructions>
<a class="org-card" [routerLink]="['standing-instructions-history']" *mifosxHasPermission="'READ_STANDINGINSTRUCTION'">
<a
class="org-card"
[routerLink]="['standing-instructions-history']"
*mifosxHasPermission="'READ_STANDINGINSTRUCTION'"
>
<div class="org-card__icon org-card__icon--slate">
<i class="fas fa-book"></i>
</div>
@@ -140,7 +146,9 @@
</div>
<div class="org-card__body">
<h3 class="org-card__title">{{ 'labels.text.Investors' | translate }}</h3>
<p class="org-card__desc">{{ 'labels.text.View the loan account details associated with the investors' | translate }}</p>
<p class="org-card__desc">
{{ 'labels.text.View the loan account details associated with the investors' | translate }}
</p>
</div>
<i class="fas fa-chevron-right org-card__arrow"></i>
</a>
@@ -190,7 +198,11 @@
<!-- Password Preferences -->
<div #passwordpreferences>
<a class="org-card" [routerLink]="['password-preferences']" *mifosxHasPermission="'READ_PASSWORD_VALIDATION_POLICY'">
<a
class="org-card"
[routerLink]="['password-preferences']"
*mifosxHasPermission="'READ_PASSWORD_VALIDATION_POLICY'"
>
<div class="org-card__icon org-card__icon--red">
<i class="fas fa-lock"></i>
</div>
@@ -246,7 +258,11 @@
<!-- Entity Data Table Checks -->
<div #entitydatatable>
<a class="org-card" [routerLink]="['entity-data-table-checks']" *mifosxHasPermission="'READ_ENTITY_DATATABLE_CHECK'">
<a
class="org-card"
[routerLink]="['entity-data-table-checks']"
*mifosxHasPermission="'READ_ENTITY_DATATABLE_CHECK'"
>
<div class="org-card__icon org-card__icon--slate">
<i class="fas fa-check"></i>
</div>
@@ -280,7 +296,9 @@
</div>
<div class="org-card__body">
<h3 class="org-card__title">{{ 'labels.heading.Bulk Import' | translate }}</h3>
<p class="org-card__desc">{{ 'labels.text.Bulk data import using excel spreadsheet templates' | translate }}</p>
<p class="org-card__desc">
{{ 'labels.text.Bulk data import using excel spreadsheet templates' | translate }}
</p>
</div>
<i class="fas fa-chevron-right org-card__arrow"></i>
</a>
@@ -62,7 +62,7 @@ $gray-900: #0f172a;
grid-template-columns: repeat(2, 1fr);
gap: 12px;
@media (max-width: 768px) {
@media (width <= 768px) {
grid-template-columns: 1fr;
}
}
@@ -83,7 +83,7 @@ $gray-900: #0f172a;
&:hover {
border-color: #cbd5e1;
background: $gray-50;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
box-shadow: 0 2px 8px rgb(0 0 0 / 4%);
.org-card__arrow {
color: $gray-700;
@@ -102,62 +102,62 @@ $gray-900: #0f172a;
flex-shrink: 0;
&--blue {
background: rgba(59, 130, 246, 0.1);
background: rgb(59 130 246 / 10%);
color: #2563eb;
}
&--amber {
background: rgba(245, 158, 11, 0.1);
background: rgb(245 158 11 / 10%);
color: #d97706;
}
&--green {
background: rgba(34, 197, 94, 0.1);
background: rgb(34 197 94 / 10%);
color: #16a34a;
}
&--emerald {
background: rgba(16, 185, 129, 0.1);
background: rgb(16 185 129 / 10%);
color: #059669;
}
&--purple {
background: rgba(139, 92, 246, 0.1);
background: rgb(139 92 246 / 10%);
color: #7c3aed;
}
&--indigo {
background: rgba(99, 102, 241, 0.1);
background: rgb(99 102 241 / 10%);
color: #4f46e5;
}
&--slate {
background: rgba(100, 116, 139, 0.1);
background: rgb(100 116 139 / 10%);
color: #475569;
}
&--orange {
background: rgba(249, 115, 22, 0.1);
background: rgb(249 115 22 / 10%);
color: #ea580c;
}
&--teal {
background: rgba(20, 184, 166, 0.1);
background: rgb(20 184 166 / 10%);
color: #0d9488;
}
&--cyan {
background: rgba(6, 182, 212, 0.1);
background: rgb(6 182 212 / 10%);
color: #0891b2;
}
&--rose {
background: rgba(244, 63, 94, 0.1);
background: rgb(244 63 94 / 10%);
color: #e11d48;
}
&--red {
background: rgba(239, 68, 68, 0.1);
background: rgb(239 68 68 / 10%);
color: #dc2626;
}
}
@@ -196,8 +196,13 @@ $gray-900: #0f172a;
// ── Dark mode ──
:host-context(.dark-theme) {
.org-header {
&__title { color: #e2e8f0; }
&__sub { color: #94a3b8; }
&__title {
color: #e2e8f0;
}
&__sub {
color: #94a3b8;
}
}
.org-card {
@@ -209,8 +214,16 @@ $gray-900: #0f172a;
border-color: #444;
}
&__title { color: #e2e8f0; }
&__desc { color: #64748b; }
&__arrow { color: #444; }
&__title {
color: #e2e8f0;
}
&__desc {
color: #64748b;
}
&__arrow {
color: #444;
}
}
}
@@ -214,5 +214,4 @@ export class OrganizationComponent implements AfterViewInit {
this.configurationWizardService.showRecurringDepositProductsList = true;
this.router.navigate(['/products/recurring-deposit-products']);
}
}
@@ -22,14 +22,20 @@
</div>
<div class="pp-body">
<mat-radio-group class="pp-options" formControlName="validationPolicyId">
<div *ngFor="let passwordPreference of passwordPreferencesData; trackBy: trackByPasswordPreference"
<div
*ngFor="let passwordPreference of passwordPreferencesData; trackBy: trackByPasswordPreference"
class="pp-option"
[class.pp-option--selected]="passwordPreferencesForm.get('validationPolicyId')?.value === passwordPreference.id">
[class.pp-option--selected]="
passwordPreferencesForm.get('validationPolicyId')?.value === passwordPreference.id
"
>
<div class="pp-option__header">
<div class="pp-option__title">{{ getPasswordLabel(passwordPreference) | translate }}</div>
<mat-radio-button [value]="passwordPreference.id"></mat-radio-button>
</div>
<div class="pp-option__desc">{{ passwordPreference.description | translateKey: 'passwordPreferences' }}</div>
<div class="pp-option__desc">
{{ passwordPreference.description | translateKey: 'passwordPreferences' }}
</div>
</div>
</mat-radio-group>
</div>
@@ -39,8 +45,14 @@
<button type="button" mat-stroked-button [routerLink]="['../']" class="pp-actions__cancel">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button type="submit" mat-flat-button color="primary" [disabled]="passwordPreferencesForm.pristine"
*mifosxHasPermission="'UPDATE_PASSWORD_VALIDATION_POLICY'" class="pp-actions__submit">
<button
type="submit"
mat-flat-button
color="primary"
[disabled]="passwordPreferencesForm.pristine"
*mifosxHasPermission="'UPDATE_PASSWORD_VALIDATION_POLICY'"
class="pp-actions__submit"
>
<i class="fas fa-check"></i> {{ 'labels.buttons.Submit' | translate }}
</button>
</div>
@@ -14,48 +14,148 @@ $gray-500: #9aa0a6;
$gray-700: #5f6368;
$gray-900: #202124;
.pp-container { max-width: 700px; margin: 0 auto; padding: 20px 16px; }
.pp-container {
max-width: 700px;
margin: 0 auto;
padding: 20px 16px;
}
.pp-header {
display: flex; align-items: center; gap: 14px; margin-bottom: 20px;
&__title { font-size: 18px; font-weight: 600; color: $gray-900; margin: 0; }
}
display: flex;
align-items: center;
gap: 14px;
margin-bottom: 20px;
.pp-back {
border-radius: 8px !important; font-size: 12px !important; font-weight: 600 !important;
height: 32px !important; border-color: $border !important; color: $gray-500 !important;
i { margin-right: 6px; }
&:hover { color: $primary !important; border-color: $primary !important; }
}
.pp-card { background: #fff; border: 1px solid $border; border-radius: 10px; overflow: hidden; }
.pp-section {
&__header {
display: flex; align-items: center; gap: 10px; padding: 12px 24px;
background: $gray-50; border-bottom: 1px solid $gray-200;
i { font-size: 14px; color: $accent; }
h3 { margin: 0; font-size: 14px; font-weight: 600; color: $gray-900; }
&__title {
font-size: 18px;
font-weight: 600;
color: $gray-900;
margin: 0;
}
}
.pp-body { padding: 20px 24px; }
.pp-back {
border-radius: 8px !important;
font-size: 12px !important;
font-weight: 600 !important;
height: 32px !important;
border-color: $border !important;
color: $gray-500 !important;
.pp-options { display: flex; flex-direction: column; gap: 12px; }
i {
margin-right: 6px;
}
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
.pp-card {
background: #fff;
border: 1px solid $border;
border-radius: 10px;
overflow: hidden;
}
.pp-section {
&__header {
display: flex;
align-items: center;
gap: 10px;
padding: 12px 24px;
background: $gray-50;
border-bottom: 1px solid $gray-200;
i {
font-size: 14px;
color: $accent;
}
h3 {
margin: 0;
font-size: 14px;
font-weight: 600;
color: $gray-900;
}
}
}
.pp-body {
padding: 20px 24px;
}
.pp-options {
display: flex;
flex-direction: column;
gap: 12px;
}
.pp-option {
border: 1px solid $border; border-radius: 8px; padding: 16px 20px;
border: 1px solid $border;
border-radius: 8px;
padding: 16px 20px;
transition: all 0.15s;
&:hover { border-color: #cbd5e1; background: $gray-50; }
&--selected { border-color: $primary; border-width: 2px; background: rgba($primary, 0.02); }
&__header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }
&__title { font-size: 14px; font-weight: 600; color: $gray-900; }
&__desc { font-size: 13px; color: $gray-700; line-height: 1.5; }
&:hover {
border-color: #cbd5e1;
background: $gray-50;
}
&--selected {
border-color: $primary;
border-width: 2px;
background: rgba($primary, 0.02);
}
&__header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 8px;
}
&__title {
font-size: 14px;
font-weight: 600;
color: $gray-900;
}
&__desc {
font-size: 13px;
color: $gray-700;
line-height: 1.5;
}
}
.pp-actions {
display: flex; justify-content: flex-end; gap: 10px; padding: 14px 24px;
border-top: 1px solid $gray-200; background: $gray-50;
&__cancel { border-radius: 8px !important; font-size: 13px !important; font-weight: 600 !important; height: 36px !important; border-color: $border !important; color: $gray-700 !important; }
&__submit { border-radius: 8px !important; font-size: 13px !important; font-weight: 600 !important; height: 36px !important; box-shadow: 0 1px 3px rgba($primary, 0.3) !important; i { margin-right: 6px; font-size: 12px; } }
display: flex;
justify-content: flex-end;
gap: 10px;
padding: 14px 24px;
border-top: 1px solid $gray-200;
background: $gray-50;
&__cancel {
border-radius: 8px !important;
font-size: 13px !important;
font-weight: 600 !important;
height: 36px !important;
border-color: $border !important;
color: $gray-700 !important;
}
&__submit {
border-radius: 8px !important;
font-size: 13px !important;
font-weight: 600 !important;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i {
margin-right: 6px;
font-size: 12px;
}
}
}
@@ -46,9 +46,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
.cp-card {
@@ -88,7 +93,9 @@ $gray-900: #202124;
gap: 4px 16px;
padding: 16px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr !important; }
@media (width <= 600px) {
grid-template-columns: 1fr !important;
}
}
.cp-field {
@@ -132,7 +139,10 @@ $gray-900: #202124;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
}
@@ -46,9 +46,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
.ep-card {
@@ -88,7 +93,9 @@ $gray-900: #202124;
gap: 4px 16px;
padding: 16px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr !important; }
@media (width <= 600px) {
grid-template-columns: 1fr !important;
}
}
.ep-field {
@@ -132,7 +139,10 @@ $gray-900: #202124;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
}
@@ -21,7 +21,13 @@
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
<div class="table-buttons">
<button mat-flat-button color="primary" class="btn-create" [routerLink]="['create']" *mifosxHasPermission="'CREATE_PAYMENTTYPE'">
<button
mat-flat-button
color="primary"
class="btn-create"
[routerLink]="['create']"
*mifosxHasPermission="'CREATE_PAYMENTTYPE'"
>
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Create Payment Type' | translate }}
</button>
@@ -75,10 +81,12 @@
@if (!paymentType.isSystemDefined) {
<div class="action-links">
<a class="cell-link" [routerLink]="[paymentType.id, 'edit']">
<i class="fas fa-pen" style="margin-right: 4px; font-size: 11px;"></i>{{ 'labels.buttons.Edit' | translate }}
<i class="fas fa-pen" style="margin-right: 4px; font-size: 11px"></i
>{{ 'labels.buttons.Edit' | translate }}
</a>
<a class="cell-link cell-link--danger" (click)="deletePaymentType(paymentType.id)">
<i class="fas fa-trash-alt" style="margin-right: 4px; font-size: 11px;"></i>{{ 'labels.buttons.Delete' | translate }}
<i class="fas fa-trash-alt" style="margin-right: 4px; font-size: 11px"></i
>{{ 'labels.buttons.Delete' | translate }}
</a>
</div>
}
@@ -33,14 +33,18 @@ $primary: #1353a0;
background: #ecfdf5;
color: #059669;
&::before { background: #059669; }
&::before {
background: #059669;
}
}
&--no {
background: #f1f5f9;
color: #94a3b8;
&::before { background: #94a3b8; }
&::before {
background: #94a3b8;
}
}
}
@@ -54,5 +58,7 @@ $primary: #1353a0;
color: #dc2626 !important;
cursor: pointer;
&:hover { text-decoration: underline; }
&:hover {
text-decoration: underline;
}
}
@@ -19,11 +19,21 @@
<div class="table-actions">
<mat-form-field class="table-search" appearance="outline">
<i matPrefix class="fas fa-search"></i>
<input matInput placeholder="{{ 'labels.inputs.Filter' | translate }}" (keyup)="applyFilter($event.target.value)" />
<input
matInput
placeholder="{{ 'labels.inputs.Filter' | translate }}"
(keyup)="applyFilter($event.target.value)"
/>
</mat-form-field>
<div class="table-buttons">
<button mat-flat-button color="primary" [routerLink]="['create']" class="btn-create" *mifosxHasPermission="'CREATE_SMSCAMPAIGN'">
<button
mat-flat-button
color="primary"
[routerLink]="['create']"
class="btn-create"
*mifosxHasPermission="'CREATE_SMSCAMPAIGN'"
>
<fa-icon icon="plus"></fa-icon>
{{ 'labels.buttons.Create SMS Campaign' | translate }}
</button>
@@ -55,7 +55,13 @@
}
<mat-form-field appearance="outline" class="si-field" (click)="fromDatePicker.open()">
<mat-label>{{ 'labels.inputs.From Date' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" formControlName="fromDate" [matDatepicker]="fromDatePicker" />
<input
matInput
[min]="minDate"
[max]="maxDate"
formControlName="fromDate"
[matDatepicker]="fromDatePicker"
/>
<mat-datepicker-toggle matSuffix [for]="fromDatePicker"></mat-datepicker-toggle>
<mat-datepicker #fromDatePicker></mat-datepicker>
</mat-form-field>
@@ -69,8 +75,16 @@
</div>
<div class="si-actions">
<button type="button" mat-stroked-button [routerLink]="['../']" class="si-actions__cancel">{{ 'labels.buttons.Cancel' | translate }}</button>
<button type="submit" mat-flat-button color="primary" class="si-actions__submit" *mifosxHasPermission="'READ_STANDINGINSTRUCTION'">
<button type="button" mat-stroked-button [routerLink]="['../']" class="si-actions__cancel">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
type="submit"
mat-flat-button
color="primary"
class="si-actions__submit"
*mifosxHasPermission="'READ_STANDINGINSTRUCTION'"
>
<i class="fas fa-search"></i> {{ 'labels.buttons.Search Instructions' | translate }}
</button>
</div>
@@ -59,7 +59,9 @@ $gray-900: #202124;
border: 1px solid $border;
border-radius: 12px;
padding: 0;
box-shadow: 0 1px 3px rgba(16, 24, 40, 0.06), 0 1px 2px rgba(16, 24, 40, 0.04);
box-shadow:
0 1px 3px rgb(16 24 40 / 6%),
0 1px 2px rgb(16 24 40 / 4%);
}
.si-section {
@@ -91,7 +93,7 @@ $gray-900: #202124;
grid-template-columns: 1fr 1fr;
gap: 4px 20px;
@media (max-width: 600px) {
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
@@ -129,7 +131,7 @@ $gray-900: #202124;
font-weight: 500;
font-size: 13px;
padding: 4px 20px !important;
box-shadow: 0 1px 2px rgba(19, 83, 160, 0.15);
box-shadow: 0 1px 2px rgb(19 83 160 / 15%);
transition: all 0.2s ease;
i {
@@ -139,7 +141,7 @@ $gray-900: #202124;
&:hover {
background: #0f4688 !important;
box-shadow: 0 2px 6px rgba(19, 83, 160, 0.25);
box-shadow: 0 2px 6px rgb(19 83 160 / 25%);
}
}
}
@@ -150,7 +152,9 @@ $gray-900: #202124;
border: 1px solid $border;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 1px 3px rgba(16, 24, 40, 0.06), 0 1px 2px rgba(16, 24, 40, 0.04);
box-shadow:
0 1px 3px rgb(16 24 40 / 6%),
0 1px 2px rgb(16 24 40 / 4%);
}
.modern-table {
@@ -46,9 +46,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
.ac-card {
@@ -92,7 +97,9 @@ $gray-900: #202124;
gap: 4px 16px;
padding: 16px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr !important; }
@media (width <= 600px) {
grid-template-columns: 1fr !important;
}
}
.ac-field {
@@ -123,7 +130,10 @@ $gray-900: #202124;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
}
@@ -21,7 +21,13 @@
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
<div class="table-buttons">
<button mat-flat-button color="primary" class="btn-create" [routerLink]="['create']" *mifosxHasPermission="'CREATE_CASHIERS_FOR_TELLER'">
<button
mat-flat-button
color="primary"
class="btn-create"
[routerLink]="['create']"
*mifosxHasPermission="'CREATE_CASHIERS_FOR_TELLER'"
>
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.buttons.New Cashier' | translate }}
</button>
@@ -24,7 +24,9 @@ $primary: #1353a0;
border-radius: 6px;
font-size: 12px;
cursor: pointer;
transition: opacity 0.15s, transform 0.15s;
transition:
opacity 0.15s,
transform 0.15s;
text-decoration: none;
&:hover {
@@ -105,7 +105,9 @@
@if (!createCashierForm.value.isFullDay) {
<div class="cc-time-row">
<mat-form-field appearance="outline" class="cc-time-field">
<mat-label>{{ 'labels.inputs.Start Time' | translate }} ({{ 'labels.inputs.Hour' | translate }})</mat-label>
<mat-label
>{{ 'labels.inputs.Start Time' | translate }} ({{ 'labels.inputs.Hour' | translate }})</mat-label
>
<mat-select formControlName="hourStartTime">
@for (hour of hours; track hour) {
<mat-option [value]="hour">{{ hour }}</mat-option>
@@ -113,7 +115,9 @@
</mat-select>
</mat-form-field>
<mat-form-field appearance="outline" class="cc-time-field">
<mat-label>{{ 'labels.inputs.Start Time' | translate }} ({{ 'labels.inputs.Minute' | translate }})</mat-label>
<mat-label
>{{ 'labels.inputs.Start Time' | translate }} ({{ 'labels.inputs.Minute' | translate }})</mat-label
>
<mat-select formControlName="minStartTime">
@for (minute of minutes; track minute) {
<mat-option [value]="minute">{{ minute }}</mat-option>
@@ -123,7 +127,9 @@
</div>
<div class="cc-time-row">
<mat-form-field appearance="outline" class="cc-time-field">
<mat-label>{{ 'labels.inputs.End Time' | translate }} ({{ 'labels.inputs.Hour' | translate }})</mat-label>
<mat-label
>{{ 'labels.inputs.End Time' | translate }} ({{ 'labels.inputs.Hour' | translate }})</mat-label
>
<mat-select formControlName="hourEndTime">
@for (hour of hours; track hour) {
<mat-option [value]="hour">{{ hour }}</mat-option>
@@ -131,7 +137,9 @@
</mat-select>
</mat-form-field>
<mat-form-field appearance="outline" class="cc-time-field">
<mat-label>{{ 'labels.inputs.End Time' | translate }} ({{ 'labels.inputs.Minute' | translate }})</mat-label>
<mat-label
>{{ 'labels.inputs.End Time' | translate }} ({{ 'labels.inputs.Minute' | translate }})</mat-label
>
<mat-select formControlName="minEndTime">
@for (minute of minutes; track minute) {
<mat-option [value]="minute">{{ minute }}</mat-option>
@@ -46,9 +46,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
.cc-card {
@@ -92,7 +97,9 @@ $gray-900: #202124;
gap: 4px 16px;
padding: 16px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr !important; }
@media (width <= 600px) {
grid-template-columns: 1fr !important;
}
}
.cc-field {
@@ -107,7 +114,10 @@ $gray-900: #202124;
display: flex !important;
gap: 12px;
@media (max-width: 600px) { flex-direction: column; gap: 4px; }
@media (width <= 600px) {
flex-direction: column;
gap: 4px;
}
}
.cc-time-field {
@@ -148,7 +158,10 @@ $gray-900: #202124;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
}
@@ -112,7 +112,9 @@
@if (!editCashierForm.value.isFullDay) {
<div class="ec-time-row">
<mat-form-field appearance="outline" class="ec-time-field">
<mat-label>{{ 'labels.inputs.Start Time' | translate }} ({{ 'labels.inputs.Hour' | translate }})</mat-label>
<mat-label
>{{ 'labels.inputs.Start Time' | translate }} ({{ 'labels.inputs.Hour' | translate }})</mat-label
>
<mat-select formControlName="hourStartTime">
@for (hour of hours; track hour) {
<mat-option [value]="hour">{{ hour }}</mat-option>
@@ -120,7 +122,9 @@
</mat-select>
</mat-form-field>
<mat-form-field appearance="outline" class="ec-time-field">
<mat-label>{{ 'labels.inputs.Start Time' | translate }} ({{ 'labels.inputs.Minute' | translate }})</mat-label>
<mat-label
>{{ 'labels.inputs.Start Time' | translate }} ({{ 'labels.inputs.Minute' | translate }})</mat-label
>
<mat-select formControlName="minStartTime">
@for (minute of minutes; track minute) {
<mat-option [value]="minute">{{ minute }}</mat-option>
@@ -130,7 +134,9 @@
</div>
<div class="ec-time-row">
<mat-form-field appearance="outline" class="ec-time-field">
<mat-label>{{ 'labels.inputs.End Time' | translate }} ({{ 'labels.inputs.Hour' | translate }})</mat-label>
<mat-label
>{{ 'labels.inputs.End Time' | translate }} ({{ 'labels.inputs.Hour' | translate }})</mat-label
>
<mat-select formControlName="hourEndTime">
@for (hour of hours; track hour) {
<mat-option [value]="hour">{{ hour }}</mat-option>
@@ -138,7 +144,9 @@
</mat-select>
</mat-form-field>
<mat-form-field appearance="outline" class="ec-time-field">
<mat-label>{{ 'labels.inputs.End Time' | translate }} ({{ 'labels.inputs.Minute' | translate }})</mat-label>
<mat-label
>{{ 'labels.inputs.End Time' | translate }} ({{ 'labels.inputs.Minute' | translate }})</mat-label
>
<mat-select formControlName="minEndTime">
@for (minute of minutes; track minute) {
<mat-option [value]="minute">{{ minute }}</mat-option>
@@ -46,9 +46,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
.ec-card {
@@ -92,7 +97,9 @@ $gray-900: #202124;
gap: 4px 16px;
padding: 16px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr !important; }
@media (width <= 600px) {
grid-template-columns: 1fr !important;
}
}
.ec-field {
@@ -107,7 +114,10 @@ $gray-900: #202124;
display: flex !important;
gap: 12px;
@media (max-width: 600px) { flex-direction: column; gap: 4px; }
@media (width <= 600px) {
flex-direction: column;
gap: 4px;
}
}
.ec-time-field {
@@ -148,7 +158,10 @@ $gray-900: #202124;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
}
@@ -46,9 +46,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
.sc-card {
@@ -92,7 +97,9 @@ $gray-900: #202124;
gap: 4px 16px;
padding: 16px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr !important; }
@media (width <= 600px) {
grid-template-columns: 1fr !important;
}
}
.sc-field {
@@ -123,7 +130,10 @@ $gray-900: #202124;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
}
@@ -16,11 +16,22 @@
</div>
<div class="table-actions">
<div class="table-buttons">
<button mat-flat-button color="primary" class="btn-create" [routerLink]="['../allocate']" *mifosxHasPermission="'ALLOCATECASHIER_TELLER'">
<button
mat-flat-button
color="primary"
class="btn-create"
[routerLink]="['../allocate']"
*mifosxHasPermission="'ALLOCATECASHIER_TELLER'"
>
<fa-icon icon="arrow-up" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Allocate Cash' | translate }}
</button>
<button mat-stroked-button class="btn-import" [routerLink]="['../settle']" *mifosxHasPermission="'SETTLECASHFROMCASHIER_TELLER'">
<button
mat-stroked-button
class="btn-import"
[routerLink]="['../settle']"
*mifosxHasPermission="'SETTLECASHFROMCASHIER_TELLER'"
>
<fa-icon icon="arrow-down" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Settle Cash' | translate }}
</button>
@@ -44,19 +55,21 @@
</div>
<div class="txn-summary__item">
<span class="txn-summary__label">{{ 'labels.inputs.Net Cash' | translate }}</span>
<span class="txn-summary__value txn-summary__value--highlight">{{ cashierData.netCash | formatNumber }} [{{ currencySelector.value }}]</span>
<span class="txn-summary__value txn-summary__value--highlight"
>{{ cashierData.netCash | formatNumber }} [{{ currencySelector.value }}]</span
>
</div>
</div>
}
<div class="table-actions" style="margin-bottom: 12px;">
<div class="table-actions" style="margin-bottom: 12px">
<mat-form-field class="table-search" appearance="outline">
<i matPrefix class="fas fa-search"></i>
<mat-label>{{ 'labels.inputs.Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
<mat-form-field appearance="outline" class="table-search" style="max-width: 220px;">
<mat-form-field appearance="outline" class="table-search" style="max-width: 220px">
<mat-label>{{ 'labels.inputs.Select Currency' | translate }}</mat-label>
<mat-select [formControl]="currencySelector" required>
@for (currency of currencyData; track currency) {
@@ -27,7 +27,7 @@ $gray-900: #202124;
border-radius: 10px;
margin-bottom: 16px;
@media (max-width: 768px) {
@media (width <= 768px) {
grid-template-columns: repeat(2, 1fr);
}
@@ -13,10 +13,22 @@
</button>
<h2 class="vc-header__title">{{ cashierData.staffName }}</h2>
<div class="vc-header__spacer"></div>
<button mat-flat-button color="primary" [routerLink]="['edit']" class="vc-header__action" *mifosxHasPermission="'UPDATE_CASHIER'">
<button
mat-flat-button
color="primary"
[routerLink]="['edit']"
class="vc-header__action"
*mifosxHasPermission="'UPDATE_CASHIER'"
>
<i class="fas fa-pen"></i> {{ 'labels.buttons.Edit' | translate }}
</button>
<button mat-stroked-button color="warn" (click)="deleteCashier()" class="vc-header__delete" *mifosxHasPermission="'DELETECASHIER_TELLER'">
<button
mat-stroked-button
color="warn"
(click)="deleteCashier()"
class="vc-header__delete"
*mifosxHasPermission="'DELETECASHIER_TELLER'"
>
<i class="fas fa-trash-alt"></i> {{ 'labels.buttons.Delete' | translate }}
</button>
</div>
@@ -49,7 +49,10 @@ $gray-900: #202124;
height: 32px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
&__delete {
@@ -58,7 +61,10 @@ $gray-900: #202124;
font-weight: 600 !important;
height: 32px !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
@@ -70,9 +76,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
.vc-card {
@@ -112,7 +123,9 @@ $gray-900: #202124;
gap: 16px;
padding: 20px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr !important; }
@media (width <= 600px) {
grid-template-columns: 1fr !important;
}
}
.vc-detail {
@@ -117,7 +117,14 @@
<button type="button" mat-stroked-button [routerLink]="['../']" class="ct-actions__cancel">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button type="submit" mat-flat-button color="primary" [disabled]="!tellerForm.valid" class="ct-actions__submit" *mifosxHasPermission="'CREATE_TELLER'">
<button
type="submit"
mat-flat-button
color="primary"
[disabled]="!tellerForm.valid"
class="ct-actions__submit"
*mifosxHasPermission="'CREATE_TELLER'"
>
<i class="fas fa-check"></i> {{ 'labels.buttons.Submit' | translate }}
</button>
</div>
@@ -43,9 +43,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
.ct-card {
@@ -84,7 +89,9 @@ $gray-900: #202124;
gap: 4px 16px;
padding: 16px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr; }
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
.ct-field {
@@ -119,6 +126,9 @@ $gray-900: #202124;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
@@ -111,7 +111,14 @@
<button type="button" mat-stroked-button [routerLink]="['../']" class="et-actions__cancel">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button type="submit" mat-flat-button color="primary" [disabled]="!tellerForm.valid" class="et-actions__submit" *mifosxHasPermission="'UPDATE_TELLER'">
<button
type="submit"
mat-flat-button
color="primary"
[disabled]="!tellerForm.valid"
class="et-actions__submit"
*mifosxHasPermission="'UPDATE_TELLER'"
>
<i class="fas fa-check"></i> {{ 'labels.buttons.Submit' | translate }}
</button>
</div>
@@ -43,9 +43,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
.et-card {
@@ -84,7 +89,9 @@ $gray-900: #202124;
gap: 4px 16px;
padding: 16px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr; }
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
.et-field {
@@ -119,6 +126,9 @@ $gray-900: #202124;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
@@ -21,7 +21,13 @@
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
<div class="table-buttons">
<button mat-flat-button color="primary" class="btn-create" [routerLink]="['create']" *mifosxHasPermission="'CREATE_TELLER'">
<button
mat-flat-button
color="primary"
class="btn-create"
[routerLink]="['create']"
*mifosxHasPermission="'CREATE_TELLER'"
>
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Create Teller' | translate }}
</button>
@@ -45,7 +51,11 @@
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Status' | translate }}</th>
<td mat-cell *matCellDef="let teller">
<span [class]="teller.status === 'ACTIVE' ? 'status-badge status-active' : 'status-badge status-closed'">
{{ teller.status === 'ACTIVE' ? ('labels.inputs.Active' | translate) : ('labels.catalogs.Inactive' | translate) }}
{{
teller.status === 'ACTIVE'
? ('labels.inputs.Active' | translate)
: ('labels.catalogs.Inactive' | translate)
}}
</span>
</td>
</ng-container>
@@ -59,7 +69,8 @@
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Actions' | translate }}</th>
<td mat-cell *matCellDef="let teller" (click)="$event.stopPropagation()">
<a class="cell-link" [routerLink]="[teller.id, 'cashiers']">
<i class="fas fa-eye" style="margin-right: 6px; font-size: 11px;"></i>{{ 'labels.buttons.View Cashiers' | translate }}
<i class="fas fa-eye" style="margin-right: 6px; font-size: 11px"></i
>{{ 'labels.buttons.View Cashiers' | translate }}
</a>
</td>
</ng-container>
@@ -13,10 +13,22 @@
</button>
<h2 class="vt-header__title">{{ tellerData.name }}</h2>
<div class="vt-header__spacer"></div>
<button mat-flat-button color="primary" [routerLink]="['edit']" class="vt-header__action" *mifosxHasPermission="'UPDATE_TELLER'">
<button
mat-flat-button
color="primary"
[routerLink]="['edit']"
class="vt-header__action"
*mifosxHasPermission="'UPDATE_TELLER'"
>
<i class="fas fa-pen"></i> {{ 'labels.buttons.Edit' | translate }}
</button>
<button mat-stroked-button color="warn" (click)="deleteTeller()" class="vt-header__delete" *mifosxHasPermission="'DELETE_TELLER'">
<button
mat-stroked-button
color="warn"
(click)="deleteTeller()"
class="vt-header__delete"
*mifosxHasPermission="'DELETE_TELLER'"
>
<i class="fas fa-trash-alt"></i> {{ 'labels.buttons.Delete' | translate }}
</button>
</div>
@@ -55,7 +67,9 @@
<div class="vt-detail">
<span class="vt-detail__label">{{ 'labels.inputs.Status' | translate }}</span>
<span class="vt-detail__value">
<span [class]="tellerData.status === 'ACTIVE' ? 'status-badge status-active' : 'status-badge status-closed'">
<span
[class]="tellerData.status === 'ACTIVE' ? 'status-badge status-active' : 'status-badge status-closed'"
>
{{ tellerData.status | titlecase }}
</span>
</span>
@@ -46,7 +46,10 @@ $gray-900: #202124;
height: 32px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
&__delete {
@@ -55,7 +58,10 @@ $gray-900: #202124;
font-weight: 600 !important;
height: 32px !important;
i { margin-right: 6px; font-size: 12px; }
i {
margin-right: 6px;
font-size: 12px;
}
}
}
@@ -67,9 +73,14 @@ $gray-900: #202124;
border-color: $border !important;
color: $gray-500 !important;
i { margin-right: 6px; }
i {
margin-right: 6px;
}
&:hover { color: $primary !important; border-color: $primary !important; }
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
.vt-card {
@@ -108,7 +119,9 @@ $gray-900: #202124;
gap: 16px;
padding: 20px 24px;
@media (max-width: 600px) { grid-template-columns: 1fr; }
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
.vt-detail {
@@ -159,12 +172,16 @@ $gray-900: #202124;
background: #ecfdf5;
color: #059669;
&::before { background: #059669; }
&::before {
background: #059669;
}
}
.status-closed {
background: #fef2f2;
color: #dc2626;
&::before { background: #dc2626; }
&::before {
background: #dc2626;
}
}
@@ -1,3 +1,11 @@
<!--
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/.
-->
<div class="wd-container">
<div class="wd-header">
<button mat-stroked-button [routerLink]="['../']" class="wd-back">
@@ -55,8 +63,14 @@
<button type="button" mat-stroked-button [routerLink]="['../']" class="wd-actions__cancel">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button type="submit" mat-flat-button color="primary" [disabled]="workingDaysForm.pristine"
*mifosxHasPermission="'UPDATE_WORKINGDAYS'" class="wd-actions__submit">
<button
type="submit"
mat-flat-button
color="primary"
[disabled]="workingDaysForm.pristine"
*mifosxHasPermission="'UPDATE_WORKINGDAYS'"
class="wd-actions__submit"
>
<i class="fas fa-check"></i> {{ 'labels.buttons.Submit' | translate }}
</button>
</div>
@@ -14,46 +14,123 @@ $gray-500: #9aa0a6;
$gray-700: #5f6368;
$gray-900: #202124;
.wd-container { max-width: 700px; margin: 0 auto; padding: 20px 16px; }
.wd-container {
max-width: 700px;
margin: 0 auto;
padding: 20px 16px;
}
.wd-header {
display: flex; align-items: center; gap: 14px; margin-bottom: 20px;
&__title { font-size: 18px; font-weight: 600; color: $gray-900; margin: 0; }
}
display: flex;
align-items: center;
gap: 14px;
margin-bottom: 20px;
.wd-back {
border-radius: 8px !important; font-size: 12px !important; font-weight: 600 !important;
height: 32px !important; border-color: $border !important; color: $gray-500 !important;
i { margin-right: 6px; }
&:hover { color: $primary !important; border-color: $primary !important; }
}
.wd-card { background: #fff; border: 1px solid $border; border-radius: 10px; overflow: hidden; }
.wd-section {
&__header {
display: flex; align-items: center; gap: 10px; padding: 12px 24px;
background: $gray-50; border-bottom: 1px solid $gray-200;
i { font-size: 14px; color: $accent; }
h3 { margin: 0; font-size: 14px; font-weight: 600; color: $gray-900; }
&__title {
font-size: 18px;
font-weight: 600;
color: $gray-900;
margin: 0;
}
}
.wd-body { padding: 20px 24px; }
.wd-back {
border-radius: 8px !important;
font-size: 12px !important;
font-weight: 600 !important;
height: 32px !important;
border-color: $border !important;
color: $gray-500 !important;
i {
margin-right: 6px;
}
&:hover {
color: $primary !important;
border-color: $primary !important;
}
}
.wd-card {
background: #fff;
border: 1px solid $border;
border-radius: 10px;
overflow: hidden;
}
.wd-section {
&__header {
display: flex;
align-items: center;
gap: 10px;
padding: 12px 24px;
background: $gray-50;
border-bottom: 1px solid $gray-200;
i {
font-size: 14px;
color: $accent;
}
h3 {
margin: 0;
font-size: 14px;
font-weight: 600;
color: $gray-900;
}
}
}
.wd-body {
padding: 20px 24px;
}
.wd-days {
display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 8px;
display: grid;
grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
gap: 8px;
}
.wd-day { padding: 8px 0; }
.wd-day {
padding: 8px 0;
}
.wd-field { width: 100%; }
.wd-field {
width: 100%;
}
.wd-checkbox { padding: 12px 0 4px; }
.wd-checkbox {
padding: 12px 0 4px;
}
.wd-actions {
display: flex; justify-content: flex-end; gap: 10px; padding: 14px 24px;
border-top: 1px solid $gray-200; background: $gray-50;
&__cancel { border-radius: 8px !important; font-size: 13px !important; font-weight: 600 !important; height: 36px !important; border-color: $border !important; color: $gray-700 !important; }
&__submit { border-radius: 8px !important; font-size: 13px !important; font-weight: 600 !important; height: 36px !important; box-shadow: 0 1px 3px rgba($primary, 0.3) !important; i { margin-right: 6px; font-size: 12px; } }
display: flex;
justify-content: flex-end;
gap: 10px;
padding: 14px 24px;
border-top: 1px solid $gray-200;
background: $gray-50;
&__cancel {
border-radius: 8px !important;
font-size: 13px !important;
font-weight: 600 !important;
height: 36px !important;
border-color: $border !important;
color: $gray-700 !important;
}
&__submit {
border-radius: 8px !important;
font-size: 13px !important;
font-weight: 600 !important;
height: 36px !important;
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
i {
margin-right: 6px;
font-size: 12px;
}
}
}