build: Use prettier for html

Stop ignoring html files in prettier and fix existing issues.
This commit is contained in:
Ralph Hopman
2024-12-19 09:36:50 +01:00
committed by Adam Saghy
parent c5fc3925fb
commit 2ec9ba81d6
651 changed files with 28935 additions and 20624 deletions
@@ -1,69 +1,70 @@
<div class="container m-b-20" fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px">
<button mat-raised-button color="primary" [routerLink]="['create']" *mifosxHasPermission="'CREATE_ADHOC'">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{"labels.buttons.Create AdHoc Query" | translate }}
{{ 'labels.buttons.Create AdHoc Query' | translate }}
</button>
</div>
<div class="container">
<div fxLayout="row" fxLayoutGap="20px">
<mat-form-field fxFlex>
<mat-label>{{'labels.inputs.Filter' | translate}}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)">
<mat-label>{{ 'labels.inputs.Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
</div>
<div class="mat-elevation-z8 table-container">
<table mat-table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.name' | translate }} </th>
<td mat-cell *matCellDef="let adhocquery"> {{ adhocquery.name }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.name' | translate }}</th>
<td mat-cell *matCellDef="let adhocquery">{{ adhocquery.name }}</td>
</ng-container>
<ng-container matColumnDef="query">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.SQL Query' | translate }} </th>
<td mat-cell *matCellDef="let adhocquery"> {{ adhocquery.query }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.SQL Query' | translate }}</th>
<td mat-cell *matCellDef="let adhocquery">{{ adhocquery.query }}</td>
</ng-container>
<ng-container matColumnDef="tableName">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Table Affected' | translate }} </th>
<td mat-cell *matCellDef="let adhocquery"> {{ adhocquery.tableName }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Table Affected' | translate }}</th>
<td mat-cell *matCellDef="let adhocquery">{{ adhocquery.tableName }}</td>
</ng-container>
<ng-container matColumnDef="email">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Email' | translate }} </th>
<td mat-cell *matCellDef="let adhocquery"> {{ adhocquery.email }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Email' | translate }}</th>
<td mat-cell *matCellDef="let adhocquery">{{ adhocquery.email }}</td>
</ng-container>
<ng-container matColumnDef="reportRunFrequency">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Report Run Frequency' | translate }} </th>
<td mat-cell *matCellDef="let adhocquery"> {{ adhocquery.reportRunFrequency }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>
{{ 'labels.inputs.Report Run Frequency' | translate }}
</th>
<td mat-cell *matCellDef="let adhocquery">{{ adhocquery.reportRunFrequency }}</td>
</ng-container>
<ng-container matColumnDef="isActive">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Status' | translate }} </th>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Status' | translate }}</th>
<td mat-cell *matCellDef="let adhocquery">
<div [className]="adhocquery.isActive === true ? 'true' : 'false'">
<fa-icon matTooltip="{{ adhocquery.isActive === true ? 'Active' : 'Inactive' }}" matTooltipPosition="right" icon="circle" size="lg"></fa-icon>
<fa-icon
matTooltip="{{ adhocquery.isActive === true ? 'Active' : 'Inactive' }}"
matTooltipPosition="right"
icon="circle"
size="lg"
></fa-icon>
</div>
</td>
</ng-container>
<ng-container matColumnDef="createdBy">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Created By' | translate }} </th>
<td mat-cell *matCellDef="let adhocquery"> {{ adhocquery.createdBy }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Created By' | translate }}</th>
<td mat-cell *matCellDef="let adhocquery">{{ adhocquery.createdBy }}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;" [routerLink]="[row.id]" class="select-row"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns" [routerLink]="[row.id]" class="select-row"></tr>
</table>
<mat-paginator [pageSizeOptions]="[10, 25, 50, 100]" showFirstLastButtons></mat-paginator>
</div>
</div>
@@ -1,18 +1,14 @@
<div class="container">
<mat-card>
<form [formGroup]="adhocQueryForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.name' | translate }}</mat-label>
<input matInput required formControlName="name">
<input matInput required formControlName="name" />
<mat-error *ngIf="adhocQueryForm.controls.name.hasError('required')">
{{ 'labels.inputs.name' | translate }} {{ "labels.commons.is" |translate}} <strong>{{ "labels.commons.required" |translate}}</strong>
{{ 'labels.inputs.name' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -20,15 +16,17 @@
<mat-label>{{ 'labels.inputs.SQL Query' | translate }}</mat-label>
<textarea matInput required formControlName="query"></textarea>
<mat-error *ngIf="adhocQueryForm.controls.query.hasError('required')">
{{ 'labels.inputs.SQL Query' | translate }} {{ "labels.commons.is" |translate}} <strong>{{ "labels.commons.required" |translate}}</strong>
{{ 'labels.inputs.SQL Query' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{ 'labels.inputs.Insert into table' | translate }}</mat-label>
<input matInput required formControlName="tableName">
<input matInput required formControlName="tableName" />
<mat-error *ngIf="adhocQueryForm.controls.tableName.hasError('required')">
{{ 'labels.inputs.Insert into table' | translate }} {{ "labels.commons.is" |translate}} <strong>{{ "labels.commons.required" |translate}}</strong>
{{ 'labels.inputs.Insert into table' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -36,15 +34,17 @@
<mat-label>{{ 'labels.inputs.Table Fields' | translate }}</mat-label>
<textarea matInput required formControlName="tableFields"></textarea>
<mat-error *ngIf="adhocQueryForm.controls.tableFields.hasError('required')">
{{ 'labels.inputs.Table Fields' | translate }} {{ "labels.commons.are" |translate}} <strong>{{ "labels.commons.required" |translate}}</strong>
{{ 'labels.inputs.Table Fields' | translate }} {{ 'labels.commons.are' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{ 'labels.inputs.Email' | translate }}</mat-label>
<input matInput formControlName="email">
<input matInput formControlName="email" />
<mat-error *ngIf="adhocQueryForm.controls.email.hasError('email')">
{{ 'labels.inputs.Email' | translate }} {{ "labels.commons.is" |translate}} <strong>{{ "labels.commons.invalid" |translate}}</strong>
{{ 'labels.inputs.Email' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.invalid' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -59,30 +59,36 @@
<mat-form-field *ngIf="adhocQueryForm.controls.reportRunFrequency.value === 5">
<mat-label>{{ 'labels.inputs.Custom Report Run Frequency (Days)' | translate }}</mat-label>
<input type="number" matInput required formControlName="reportRunEvery">
<input type="number" matInput required formControlName="reportRunEvery" />
<mat-error *ngIf="adhocQueryForm.controls.reportRunEvery.hasError('required')">
{{ 'labels.inputs.Custom Report Run Frequency' | translate }} {{ "labels.commons.is" |translate}} <strong>{{ "labels.commons.required" |translate}}</strong>
{{ 'labels.inputs.Custom Report Run Frequency' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
<mat-error *ngIf="adhocQueryForm.controls.reportRunEvery.hasError('min')">
{{ 'labels.inputs.Custom Report Run Frequency' | translate }} <strong>{{ "labels.commons.must be larger than 0" |translate}}</strong>
{{ 'labels.inputs.Custom Report Run Frequency' | translate }}
<strong>{{ 'labels.commons.must be larger than 0' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-checkbox labelPosition="before" formControlName="isActive">
{{ 'labels.inputs.Active' | translate }}
</mat-checkbox>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../']">{{"labels.buttons.Cancel" | translate }}</button>
<button mat-raised-button color="primary" [disabled]="!adhocQueryForm.valid" *mifosxHasPermission="'CREATE_ADHOC'">{{"labels.buttons.Submit" | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!adhocQueryForm.valid"
*mifosxHasPermission="'CREATE_ADHOC'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</form>
</mat-card>
</div>
@@ -1,18 +1,14 @@
<div class="container">
<mat-card>
<form [formGroup]="editAdhocQueryForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.name' | translate }}</mat-label>
<input matInput required formControlName="name">
<input matInput required formControlName="name" />
<mat-error *ngIf="editAdhocQueryForm.controls.name.hasError('required')">
{{ 'labels.inputs.name' | translate }} {{ "labels.commons.is" |translate}} <strong>{{ "labels.commons.required" |translate}}</strong>
{{ 'labels.inputs.name' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -20,15 +16,17 @@
<mat-label>{{ 'labels.inputs.SQL Query' | translate }}</mat-label>
<textarea matInput required formControlName="query"></textarea>
<mat-error *ngIf="editAdhocQueryForm.controls.query.hasError('required')">
{{ 'labels.inputs.SQL Query' | translate }} {{ "labels.commons.is" |translate}} <strong>{{ "labels.commons.required" |translate}}</strong>
{{ 'labels.inputs.SQL Query' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{ 'labels.inputs.Insert into table' | translate }}</mat-label>
<input matInput required formControlName="tableName">
<input matInput required formControlName="tableName" />
<mat-error *ngIf="editAdhocQueryForm.controls.tableName.hasError('required')">
{{ 'labels.inputs.Insert into table' | translate }} {{ "labels.commons.is" |translate}} <strong>{{ "labels.commons.required" |translate}}</strong>
{{ 'labels.inputs.Insert into table' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -36,15 +34,17 @@
<mat-label>{{ 'labels.inputs.Table Fields' | translate }}</mat-label>
<textarea matInput required formControlName="tableFields"></textarea>
<mat-error *ngIf="editAdhocQueryForm.controls.tableFields.hasError('required')">
{{ 'labels.inputs.Table Fields' | translate }} {{ "labels.commons.are" |translate}} <strong>{{ "labels.commons.required" |translate}}</strong>
{{ 'labels.inputs.Table Fields' | translate }} {{ 'labels.commons.are' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{ 'labels.inputs.Email' | translate }}</mat-label>
<input matInput formControlName="email">
<input matInput formControlName="email" />
<mat-error *ngIf="editAdhocQueryForm.controls.email.hasError('email')">
{{ 'labels.inputs.Email' | translate }} {{ "labels.commons.is" |translate}} <strong>{{ "labels.commons.invalid" |translate}}</strong>
{{ 'labels.inputs.Email' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.invalid' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -59,30 +59,36 @@
<mat-form-field *ngIf="editAdhocQueryForm.controls.reportRunFrequency.value === 5">
<mat-label>{{ 'labels.inputs.Custom Report Run Frequency (Days)' | translate }}</mat-label>
<input type="number" matInput required formControlName="reportRunEvery">
<input type="number" matInput required formControlName="reportRunEvery" />
<mat-error *ngIf="editAdhocQueryForm.controls.reportRunEvery.hasError('required')">
{{ 'labels.inputs.Custom Report Run Frequency' | translate }} {{ "labels.commons.is" |translate}} <strong>{{ "labels.commons.required" |translate}}</strong>
{{ 'labels.inputs.Custom Report Run Frequency' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
<mat-error *ngIf="editAdhocQueryForm.controls.reportRunEvery.hasError('min')">
{{ 'labels.inputs.Custom Report Run Frequency' | translate }} <strong>{{ "labels.commons.must be larger than 0" |translate}}</strong>
{{ 'labels.inputs.Custom Report Run Frequency' | translate }}
<strong>{{ 'labels.commons.must be larger than 0' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-checkbox labelPosition="before" formControlName="isActive">
{{ 'labels.inputs.Active' | translate }}
</mat-checkbox>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../']">{{"labels.buttons.Cancel" | translate }}</button>
<button mat-raised-button color="primary" [disabled]="!editAdhocQueryForm.valid" *mifosxHasPermission="'UPDATE_ADHOC'">{{"labels.buttons.Submit" | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!editAdhocQueryForm.valid"
*mifosxHasPermission="'UPDATE_ADHOC'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</form>
</mat-card>
</div>
@@ -1,22 +1,18 @@
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column" class="container m-b-20">
<button mat-raised-button color="primary" [routerLink]="['edit']" *mifosxHasPermission="'UPDATE_ADHOC'">
<fa-icon icon="edit" class="m-r-10"></fa-icon>
{{"labels.buttons.Edit" | translate }}
{{ 'labels.buttons.Edit' | translate }}
</button>
<button mat-raised-button color="warn" (click)="deleteAdhocQuery()" *mifosxHasPermission="'DELETE_ADHOC'">
<fa-icon icon="trash" class="m-r-10"></fa-icon>
{{"labels.buttons.Delete" | translate }}
{{ 'labels.buttons.Delete' | translate }}
</button>
</div>
<div class="container">
<mat-card>
<mat-card-content>
<div fxLayout="row wrap" class="content">
<div fxFlex="50%" class="mat-body-strong">
{{ 'labels.inputs.name' | translate }}
</div>
@@ -64,11 +60,7 @@
<div fxFlex="50%">
{{ adhocQueryData.createdBy }}
</div>
</div>
</mat-card-content>
</mat-card>
</div>
@@ -1,199 +1,240 @@
<!-- TODO: Refactor Permissions -->
<div class="container">
<mat-card>
<div fxLayout="row" fxLayout.lt-md="column" fxLayoutGap="20px">
<div fxFlex="50%">
<mat-nav-list>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Offices']">
<fa-icon icon="building" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Offices']">{{'labels.heading.Offices' | translate }}</h4>
<h4 matLine [routerLink]="['Offices']">{{ 'labels.heading.Offices' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(0)" *ngIf="!arrowBooleans[0]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(0)" *ngIf="arrowBooleans[0]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[0]" [routerLink]="['Offices']">{{ 'labels.text.Download, Upload Offices Template' | translate }}</p>
<p matLine *ngIf="arrowBooleans[0]" [routerLink]="['Offices']">
{{ 'labels.text.Download, Upload Offices Template' | translate }}
</p>
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Users']">
<fa-icon icon="user" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Users']">{{'labels.heading.Users' | translate }}</h4>
<h4 matLine [routerLink]="['Users']">{{ 'labels.heading.Users' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(1)" *ngIf="!arrowBooleans[1]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(1)" *ngIf="arrowBooleans[1]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[1]" [routerLink]="['Users']">{{ 'labels.text.Download offices template and Upload office excel files' | translate }}</p>
<p matLine *ngIf="arrowBooleans[1]" [routerLink]="['Users']">
{{ 'labels.text.Download offices template and Upload office excel files' | translate }}
</p>
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Groups']">
<fa-icon icon="users" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Groups']">{{'labels.heading.Groups' | translate }}</h4>
<h4 matLine [routerLink]="['Groups']">{{ 'labels.heading.Groups' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(2)" *ngIf="!arrowBooleans[2]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(2)" *ngIf="arrowBooleans[2]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[2]" [routerLink]="['Groups']">{{ 'labels.text.Download groups template and Upload group excel files' | translate }}</p>
<p matLine *ngIf="arrowBooleans[2]" [routerLink]="['Groups']">
{{ 'labels.text.Download groups template and Upload group excel files' | translate }}
</p>
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Loan Accounts']">
<fa-icon icon="money-bill-alt" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Loan Accounts']">{{'labels.heading.Loan Accounts' | translate }}</h4>
<h4 matLine [routerLink]="['Loan Accounts']">{{ 'labels.heading.Loan Accounts' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(3)" *ngIf="!arrowBooleans[3]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(3)" *ngIf="arrowBooleans[3]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[3]" [routerLink]="['Loan Accounts']">{{ 'labels.text.Download loan accounts template and upload loan account excel files' | translate }}</p>
<p matLine *ngIf="arrowBooleans[3]" [routerLink]="['Loan Accounts']">
{{ 'labels.text.Download loan accounts template and upload loan account excel files' | translate }}
</p>
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Savings Accounts']">
<fa-icon icon="briefcase" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Savings Accounts']">{{'labels.heading.Savings Accounts' | translate }}</h4>
<h4 matLine [routerLink]="['Savings Accounts']">{{ 'labels.heading.Savings Accounts' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(4)" *ngIf="!arrowBooleans[4]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(4)" *ngIf="arrowBooleans[4]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[4]" [routerLink]="['Savings Accounts']">{{ 'labels.text.Download savings accounts template and upload savings account excel files' | translate }}</p>
<p matLine *ngIf="arrowBooleans[4]" [routerLink]="['Savings Accounts']">
{{ 'labels.text.Download savings accounts template and upload savings account excel files' | translate }}
</p>
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Fixed Deposit Accounts']">
<fa-icon icon="briefcase" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Fixed Deposit Accounts']">{{'labels.heading.Fixed Deposit Accounts' | translate }}</h4>
<h4 matLine [routerLink]="['Fixed Deposit Accounts']">
{{ 'labels.heading.Fixed Deposit Accounts' | translate }}
</h4>
<fa-icon (click)="arrowBooleansToggle(5)" *ngIf="!arrowBooleans[5]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(5)" *ngIf="arrowBooleans[5]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[5]" [routerLink]="['Fixed Deposit Accounts']">{{ 'labels.text.Download fixed deposit accounts template and upload fixed deposit account excel files' | translate }}</p>
<p matLine *ngIf="arrowBooleans[5]" [routerLink]="['Fixed Deposit Accounts']">
{{
'labels.text.Download fixed deposit accounts template and upload fixed deposit account excel files'
| translate
}}
</p>
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Chart of Accounts']">
<fa-icon icon="money-bill-alt" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Chart of Accounts']">{{'labels.heading.Chart of Accounts' | translate }}</h4>
<h4 matLine [routerLink]="['Chart of Accounts']">{{ 'labels.heading.Chart of Accounts' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(6)" *ngIf="!arrowBooleans[6]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(6)" *ngIf="arrowBooleans[6]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[6]" [routerLink]="['Chart of Accounts']">{{ 'labels.text.Download chart of accounts template and upload chart of account excel files' | translate }}</p>
<p matLine *ngIf="arrowBooleans[6]" [routerLink]="['Chart of Accounts']">
{{
'labels.text.Download chart of accounts template and upload chart of account excel files' | translate
}}
</p>
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Share Accounts']">
<fa-icon icon="briefcase" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Share Accounts']">{{'labels.heading.Share Accounts' | translate }}</h4>
<h4 matLine [routerLink]="['Share Accounts']">{{ 'labels.heading.Share Accounts' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(7)" *ngIf="!arrowBooleans[7]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(7)" *ngIf="arrowBooleans[7]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[7]" [routerLink]="['Share Accounts']">{{ 'labels.text.Download share accounts template and upload share account excel files' | translate }}</p>
<p matLine *ngIf="arrowBooleans[7]" [routerLink]="['Share Accounts']">
{{ 'labels.text.Download share accounts template and upload share account excel files' | translate }}
</p>
</mat-list-item>
</mat-nav-list>
</div>
<div fxFlex="50%">
<mat-nav-list>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Employees']">
<fa-icon icon="user" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Employees']">{{'labels.heading.Employees' | translate }}</h4>
<h4 matLine [routerLink]="['Employees']">{{ 'labels.heading.Employees' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(8)" *ngIf="!arrowBooleans[8]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(8)" *ngIf="arrowBooleans[8]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[8]" [routerLink]="['Employees']">{{ 'labels.text.Download loan accounts template and upload loan account excel files' | translate }}</p>
<p matLine *ngIf="arrowBooleans[8]" [routerLink]="['Employees']">
{{ 'labels.text.Download loan accounts template and upload loan account excel files' | translate }}
</p>
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Clients']">
<fa-icon icon="user" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Clients']">{{'labels.heading.Clients' | translate }}</h4>
<h4 matLine [routerLink]="['Clients']">{{ 'labels.heading.Clients' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(9)" *ngIf="!arrowBooleans[9]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(9)" *ngIf="arrowBooleans[9]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[9]" [routerLink]="['Clients']">{{ 'labels.text.Download clients template and upload clients excel files' | translate }}</p>
<p matLine *ngIf="arrowBooleans[9]" [routerLink]="['Clients']">
{{ 'labels.text.Download clients template and upload clients excel files' | translate }}
</p>
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Centers']">
<fa-icon icon="users" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Centers']">{{'labels.heading.Centers' | translate }}</h4>
<h4 matLine [routerLink]="['Centers']">{{ 'labels.heading.Centers' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(10)" *ngIf="!arrowBooleans[10]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(10)" *ngIf="arrowBooleans[10]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[10]" [routerLink]="['Centers']">{{ 'labels.text.Download centers template and upload centers excel files' | translate }}</p>
<p matLine *ngIf="arrowBooleans[10]" [routerLink]="['Centers']">
{{ 'labels.text.Download centers template and upload centers excel files' | translate }}
</p>
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Loan Repayments']">
<fa-icon icon="briefcase" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Loan Repayments']">{{'labels.heading.Loan Repayments' | translate }}</h4>
<h4 matLine [routerLink]="['Loan Repayments']">{{ 'labels.heading.Loan Repayments' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(11)" *ngIf="!arrowBooleans[11]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(11)" *ngIf="arrowBooleans[11]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[11]" [routerLink]="['Loan Repayments']">{{ 'labels.text.Download loan repayments template and upload loan repayment excel files' | translate }}</p>
<p matLine *ngIf="arrowBooleans[11]" [routerLink]="['Loan Repayments']">
{{ 'labels.text.Download loan repayments template and upload loan repayment excel files' | translate }}
</p>
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Savings Transactions']">
<fa-icon icon="briefcase" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Savings Transactions']">{{'labels.heading.Savings Transactions' | translate }}</h4>
<h4 matLine [routerLink]="['Savings Transactions']">
{{ 'labels.heading.Savings Transactions' | translate }}
</h4>
<fa-icon (click)="arrowBooleansToggle(12)" *ngIf="!arrowBooleans[12]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(12)" *ngIf="arrowBooleans[12]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[12]" [routerLink]="['Savings Transactions']">{{ 'labels.text.Download savings transactions template and upload savings transaction excel files' | translate }}</p>
<p matLine *ngIf="arrowBooleans[12]" [routerLink]="['Savings Transactions']">
{{
'labels.text.Download savings transactions template and upload savings transaction excel files'
| translate
}}
</p>
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Fixed Deposit Transactions']">
<fa-icon icon="briefcase" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Fixed Deposit Transactions']">{{'labels.heading.Fixed Deposit Transactions' | translate }}</h4>
<h4 matLine [routerLink]="['Fixed Deposit Transactions']">
{{ 'labels.heading.Fixed Deposit Transactions' | translate }}
</h4>
<fa-icon (click)="arrowBooleansToggle(13)" *ngIf="!arrowBooleans[13]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(13)" *ngIf="arrowBooleans[13]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[13]" [routerLink]="['Fixed Deposit Transactions']">{{ 'labels.text.Download fixed deposit transactions template and upload fixed deposit transaction excel files' | translate }}</p>
<p matLine *ngIf="arrowBooleans[13]" [routerLink]="['Fixed Deposit Transactions']">
{{
'labels.text.Download fixed deposit transactions template and upload fixed deposit transaction excel files'
| translate
}}
</p>
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Recurring Deposit Transactions']">
<fa-icon icon="briefcase" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Recurring Deposit Transactions']">{{'labels.heading.Recurring Deposit Transactions' | translate }}</h4>
<h4 matLine [routerLink]="['Recurring Deposit Transactions']">
{{ 'labels.heading.Recurring Deposit Transactions' | translate }}
</h4>
<fa-icon (click)="arrowBooleansToggle(14)" *ngIf="!arrowBooleans[14]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(14)" *ngIf="arrowBooleans[14]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[14]" [routerLink]="['Recurring Deposit Transactions']">{{ 'labels.text.Download recurring deposit transactions template and upload recurring deposit transaction excel files' | translate }}</p>
<p matLine *ngIf="arrowBooleans[14]" [routerLink]="['Recurring Deposit Transactions']">
{{
'labels.text.Download recurring deposit transactions template and upload recurring deposit transaction excel files'
| translate
}}
</p>
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Journal Entries']">
<fa-icon icon="chevron-right" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Journal Entries']">{{'labels.heading.Journal Entries' | translate }}</h4>
<h4 matLine [routerLink]="['Journal Entries']">{{ 'labels.heading.Journal Entries' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(15)" *ngIf="!arrowBooleans[15]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(15)" *ngIf="arrowBooleans[15]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[15]" [routerLink]="['Journal Entries']">{{ 'labels.text.Download journal entries template and upload journal entries excel files' | translate }}</p>
<p matLine *ngIf="arrowBooleans[15]" [routerLink]="['Journal Entries']">
{{ 'labels.text.Download journal entries template and upload journal entries excel files' | translate }}
</p>
</mat-list-item>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['Guarantors']">
<fa-icon icon="chevron-right" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['Guarantors']">{{'labels.heading.Guarantors' | translate }}</h4>
<h4 matLine [routerLink]="['Guarantors']">{{ 'labels.heading.Guarantors' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(16)" *ngIf="!arrowBooleans[16]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(16)" *ngIf="arrowBooleans[16]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[16]" [routerLink]="['Guarantors']">{{ 'labels.text.Download guarantors template and upload guarantor excel files' | translate }}</p>
<p matLine *ngIf="arrowBooleans[16]" [routerLink]="['Guarantors']">
{{ 'labels.text.Download guarantors template and upload guarantor excel files' | translate }}
</p>
</mat-list-item>
</mat-nav-list>
</div>
</div>
</mat-card>
</div>
@@ -1,21 +1,18 @@
<div class="container">
<div fxLayoutGap="2%" class="m-b-20">
<mat-card fxLayout="column" fxLayoutGap="2%" fxFlex="50%">
<h3><strong>{{bulkImport.name}} {{ 'labels.heading.Template' | translate }}</strong></h3>
<h3>
<strong>{{ bulkImport.name }} {{ 'labels.heading.Template' | translate }}</strong>
</h3>
<form [formGroup]="bulkImportForm">
<mat-card-content>
<div *ngIf="bulkImport.formFields >= 1">
<mat-form-field fxFlex>
<mat-label>{{ 'labels.inputs.Office' | translate }}</mat-label>
<mat-select formControlName="officeId">
<mat-option *ngFor="let office of officeData" [value]="office.id">
{{ office.name }}
{{ office.name }}
</mat-option>
</mat-select>
</mat-form-field>
@@ -26,7 +23,7 @@
<mat-label>{{ 'labels.inputs.Staff' | translate }}</mat-label>
<mat-select formControlName="staffId">
<mat-option *ngFor="let staff of staffData" [value]="staff.id">
{{ staff.displayName }}
{{ staff.displayName }}
</mat-option>
</mat-select>
</mat-form-field>
@@ -41,110 +38,112 @@
</mat-select>
</mat-form-field>
</div>
</mat-card-content>
</form>
<div fxFlex="13%">
<button mat-raised-button color="primary" (click)="downloadTemplate()" *mifosxHasPermission="bulkImport.permission">
<i class="fa fa-download"></i>&nbsp;&nbsp;{{'labels.buttons.Download' | translate }}
<button
mat-raised-button
color="primary"
(click)="downloadTemplate()"
*mifosxHasPermission="bulkImport.permission"
>
<i class="fa fa-download"></i>&nbsp;&nbsp;{{ 'labels.buttons.Download' | translate }}
</button>
</div>
</mat-card>
<mat-card fxLayout="column" fxLayoutGap="2%" fxFlex="50%">
<h3>
<strong>{{ bulkImport.name }}</strong>
</h3>
<h3><strong>{{bulkImport.name}}</strong></h3>
<h4>{{'labels.heading.Select Excel File' | translate }}</h4>
<h4>{{ 'labels.heading.Select Excel File' | translate }}</h4>
<mifosx-file-upload flex="75%" (change)="onFileSelect($event)" acceptFilter=".xls,.xlsx"></mifosx-file-upload>
<mat-hint *ngIf="bulkImport.name === 'Clients'">{{ 'labels.text.Please retain the value Entity/Person in the filename.' | translate }}</mat-hint>
<mat-hint *ngIf="bulkImport.name === 'Clients'">{{
'labels.text.Please retain the value Entity/Person in the filename.' | translate
}}</mat-hint>
<div fxFlex="13%">
<button mat-raised-button color="primary" [disabled]="!template" (click)="uploadTemplate()">
<i class="fa fa-upload"></i>&nbsp;&nbsp;{{'labels.buttons.Upload' | translate }}
<i class="fa fa-upload"></i>&nbsp;&nbsp;{{ 'labels.buttons.Upload' | translate }}
</button>
</div>
<div *ngIf="bulkImport.formFields >= 2" fxFlex class="cover"></div>
</mat-card>
</div>
<mat-card>
<div>
<h3 class="documents"><strong>{{ 'labels.heading.Documents' | translate }}</strong></h3>
<h3 class="documents">
<strong>{{ 'labels.heading.Documents' | translate }}</strong>
</h3>
</div>
<div class="m-b-10" fxLayoutAlign="end">
<button mat-raised-button color="primary" (click)="refreshDocuments()">
<i class="fa fa-repeat"></i>&nbsp;&nbsp;{{'labels.buttons.Refresh' | translate }}
<button mat-raised-button color="primary" (click)="refreshDocuments()">
<i class="fa fa-repeat"></i>&nbsp;&nbsp;{{ 'labels.buttons.Refresh' | translate }}
</button>
</div>
<div class="imports-table mat-elevation-z1">
<table #importsTable mat-table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.name' | translate }} </th>
<td mat-cell *matCellDef="let import"> {{ import.name }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.name' | translate }}</th>
<td mat-cell *matCellDef="let import">{{ import.name }}</td>
</ng-container>
<ng-container matColumnDef="importTime">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Import Time' | translate }} </th>
<td mat-cell *matCellDef="let import"> {{ import.importTime | dateFormat }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Import Time' | translate }}</th>
<td mat-cell *matCellDef="let import">{{ import.importTime | dateFormat }}</td>
</ng-container>
<ng-container matColumnDef="endTime">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.End Time' | translate }} </th>
<td mat-cell *matCellDef="let import"> {{ import.endTime | dateFormat }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.End Time' | translate }}</th>
<td mat-cell *matCellDef="let import">{{ import.endTime | dateFormat }}</td>
</ng-container>
<ng-container matColumnDef="completed">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Completed' | translate }} </th>
<td mat-cell *matCellDef="let import"> {{ import.completed }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Completed' | translate }}</th>
<td mat-cell *matCellDef="let import">{{ import.completed }}</td>
</ng-container>
<ng-container matColumnDef="totalRecords">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Total Records' | translate }} </th>
<td mat-cell *matCellDef="let import"> {{ import.totalRecords }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Total Records' | translate }}</th>
<td mat-cell *matCellDef="let import">{{ import.totalRecords }}</td>
</ng-container>
<ng-container matColumnDef="successCount">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Success Count' | translate }} </th>
<td mat-cell *matCellDef="let import"> {{ import.successCount }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Success Count' | translate }}</th>
<td mat-cell *matCellDef="let import">{{ import.successCount }}</td>
</ng-container>
<ng-container matColumnDef="failureCount">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Failure Count' | translate }} </th>
<td mat-cell *matCellDef="let import"> {{ import.failureCount }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Failure Count' | translate }}</th>
<td mat-cell *matCellDef="let import">{{ import.failureCount }}</td>
</ng-container>
<ng-container matColumnDef="download">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Download' | translate }} </th>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Download' | translate }}</th>
<td mat-cell *matCellDef="let import">
<button mat-icon-button (click)="downloadDocument(import.name, import.importId)" *mifosxHasPermission="'READ_DOCUMENT'">
<button
mat-icon-button
(click)="downloadDocument(import.name, import.importId)"
*mifosxHasPermission="'READ_DOCUMENT'"
>
<fa-icon icon="cloud-download-alt"></fa-icon>
</button>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;" class="select-row"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns" class="select-row"></tr>
</table>
</div>
<mat-paginator [pageSizeOptions]="[10, 25, 50, 100]" showFirstLastButtons></mat-paginator>
</mat-card>
</div>
@@ -1,159 +1,134 @@
<div class="container">
<mat-card>
<form [formGroup]="bulkLoanForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Office' | translate }}</mat-label>
<mat-select required (selectionChange)="getOffice($event.value)">
<mat-option *ngFor="let office of offices" [value]="office.id">
{{ office.name }}
{{ office.name }}
</mat-option>
</mat-select>
</mat-form-field>
</div>
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%" (click)="assignmentDatePicker.open()">
<mat-label>{{ 'labels.inputs.Assignment Date' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="assignmentDatePicker" required formControlName="assignmentDate">
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="assignmentDatePicker"
required
formControlName="assignmentDate"
/>
<mat-datepicker-toggle matSuffix [for]="assignmentDatePicker"></mat-datepicker-toggle>
<mat-datepicker #assignmentDatePicker></mat-datepicker>
<mat-error *ngIf="bulkLoanForm.controls.assignmentDate.hasError('required')">
{{ 'labels.inputs.Assignment Date' | translate }} {{ "labels.commons.is" |translate}} <strong>{{ "labels.commons.required" |translate}}</strong>
{{ 'labels.inputs.Assignment Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
</div>
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%" *ngIf="fromLoanOfficers !== undefined">
<mat-label>{{ 'labels.inputs.From loan officer' | translate }}</mat-label>
<mat-select required formControlName="fromLoanOfficerId" (selectionChange)="getFromOfficers($event.value)">
<mat-option *ngFor="let fromOfficers of fromLoanOfficers" [value]="fromOfficers.id">
{{ fromOfficers.displayName }}
{{ fromOfficers.displayName }}
</mat-option>
</mat-select>
<mat-error *ngIf="bulkLoanForm.controls.fromLoanOfficerId.hasError('required')">
{{ 'labels.inputs.From Loan Officer' | translate }} {{ "labels.commons.is" |translate}} <strong>{{ "labels.commons.required" |translate}}</strong>
{{ 'labels.inputs.From Loan Officer' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
</div>
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.To loan officer' | translate }}</mat-label>
<mat-select required formControlName="toLoanOfficerId">
<mat-option *ngFor="let toOfficers of toLoanOfficers" [value]="toOfficers.id">
{{ toOfficers.displayName }}
{{ toOfficers.displayName }}
</mat-option>
</mat-select>
<mat-error *ngIf="bulkLoanForm.controls.toLoanOfficerId.hasError('required')">
{{ 'labels.inputs.To Loan Officer' | translate }} {{ "labels.commons.is" |translate}} <strong>{{ "labels.commons.required" |translate}}</strong>
{{ 'labels.inputs.To Loan Officer' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
</div>
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<table *ngIf="officerTemplate !== undefined" fxFlex="48%">
<thead>
<th> {{ 'labels.inputs.Clients' | translate }} </th>
<th>{{ 'labels.inputs.Clients' | translate }}</th>
</thead>
<tbody>
<tr *ngFor="let clients of officerTemplate.accountSummaryCollection.clients">
<table>
<tr>
<td> <strong> {{ clients.displayName }} </strong></td>
<td>
<strong> {{ clients.displayName }} </strong>
</td>
</tr>
<tr *ngFor="let loans of clients.loans">
<td>
<mat-checkbox (change)="getLoans($event,loans.id)">{{ loans.productName}}({{ loans.accountNo }})</mat-checkbox>
<td>
<mat-checkbox (change)="getLoans($event, loans.id)"
>{{ loans.productName }}({{ loans.accountNo }})</mat-checkbox
>
</td>
</tr>
</table>
</tr>
</tbody>
</table>
<table *ngIf="officerTemplate !== undefined" fxFlex="48%">
<thead>
<th> {{ 'labels.inputs.Groups' | translate }} </th>
<th>{{ 'labels.inputs.Groups' | translate }}</th>
</thead>
<tbody>
<tr *ngFor="let groups of officerTemplate.accountSummaryCollection.groups">
<table>
<tr>
<td> <strong> {{ groups.displayName }} </strong></td>
<td>
<strong> {{ groups.displayName }} </strong>
</td>
</tr>
<tr *ngFor="let loans of groups.loans">
<td>
<mat-checkbox>{{ loans.productName}}({{ loans.accountNo }})</mat-checkbox>
<td>
<mat-checkbox>{{ loans.productName }}({{ loans.accountNo }})</mat-checkbox>
</td>
</tr>
</table>
</tr>
</tbody>
</table>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../']">{{'labels.buttons.Cancel' | translate }}</button>
<button mat-raised-button color="primary" [disabled]="!bulkLoanForm.valid" *mifosxHasPermission="'BULKREASSIGN_LOAN'">{{'labels.buttons.Submit' | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!bulkLoanForm.valid"
*mifosxHasPermission="'BULKREASSIGN_LOAN'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</form>
</mat-card>
</div>
@@ -1,70 +1,98 @@
<div class="container m-b-20" fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px">
<div #buttonAddEdit class="in-block">
<button mat-raised-button color="primary" [routerLink]="'manage'" *mifosxHasPermission="'UPDATE_CURRENCY'">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{'labels.buttons.Add/Edit' | translate }}
</button>
<div #buttonAddEdit class="in-block">
<button mat-raised-button color="primary" [routerLink]="'manage'" *mifosxHasPermission="'UPDATE_CURRENCY'">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Add/Edit' | translate }}
</button>
</div>
</div>
<div class="container">
<div #filter fxLayout="row" fxLayoutGap="20px">
<mat-form-field fxFlex>
<mat-label >{{ 'labels.inputs.Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)">
<mat-label>{{ 'labels.inputs.Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
</div>
<div #tableCurrencies class="mat-elevation-z8">
<table mat-table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Currency Name' | translate }} </th>
<td mat-cell *matCellDef="let currency"> {{ currency.name }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Currency Name' | translate }}</th>
<td mat-cell *matCellDef="let currency">{{ currency.name }}</td>
</ng-container>
<ng-container matColumnDef="code">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Currency Code' | translate }} </th>
<td mat-cell *matCellDef="let currency"> {{ currency.code }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Currency Code' | translate }}</th>
<td mat-cell *matCellDef="let currency">{{ currency.code }}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
</table>
<mat-paginator [pageSizeOptions]="[10, 25, 50, 100]" showFirstLastButtons></mat-paginator>
</div>
</div>
<ng-template #templateButtonAddEdit let-popover="popover">
<h2>{{ 'labels.heading.Add/Edit Currency' | translate }}</h2>
<p class="mw300">{{ 'labels.text.List of all currencies currently in use' | translate }}</p>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn" (click)="popover.close();configurationWizardService.closeConfigWizard()">{{'labels.buttons.Close' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();previousStep()">{{'labels.buttons.Back' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();showPopover(templateFilter, filter, 'bottom', true)">{{'labels.buttons.Next' | translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); previousStep()">
{{ 'labels.buttons.Back' | translate }}
</button>
<button
mat-raised-button
color="primary"
(click)="popover.close(); showPopover(templateFilter, filter, 'bottom', true)"
>
{{ 'labels.buttons.Next' | translate }}
</button>
</div>
</ng-template>
<ng-template #templateFilter let-popover="popover">
<h4>{{ 'labels.heading.Search bar to filter currencies.' | translate }}</h4>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn" (click)="popover.close();configurationWizardService.closeConfigWizard()">{{'labels.buttons.Close' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();showPopover(templateButtonAddEdit,buttonAddEdit, 'bottom', true)">{{'labels.buttons.Back' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();showPopover(templateTableCurrencies, tableCurrencies, 'top', true)">{{'labels.buttons.Next' | translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
<button
mat-raised-button
color="primary"
(click)="popover.close(); showPopover(templateButtonAddEdit, buttonAddEdit, 'bottom', true)"
>
{{ 'labels.buttons.Back' | translate }}
</button>
<button
mat-raised-button
color="primary"
(click)="popover.close(); showPopover(templateTableCurrencies, tableCurrencies, 'top', true)"
>
{{ 'labels.buttons.Next' | translate }}
</button>
</div>
</ng-template>
<ng-template #templateTableCurrencies let-popover="popover">
<h4>{{ 'labels.heading.List of currencies available.' | translate }}</h4>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn" (click)="popover.close();configurationWizardService.closeConfigWizard()">{{'labels.buttons.Close' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();showPopover(templateFilter, filter, 'bottom', true)">{{'labels.buttons.Back' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();nextStep()">{{'labels.buttons.Next' | translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
<button
mat-raised-button
color="primary"
(click)="popover.close(); showPopover(templateFilter, filter, 'bottom', true)"
>
{{ 'labels.buttons.Back' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); nextStep()">
{{ 'labels.buttons.Next' | translate }}
</button>
</div>
</ng-template>
@@ -1,63 +1,82 @@
<div class="container">
<mat-card>
<div #currencyFormRef>
<form #formRef="ngForm" [formGroup]="currencyForm" fxLayout="row" fxLayoutAlign="start baseline" fxLayoutGap="20px"
fxFlex="48%" (ngSubmit)="addCurrency()">
<form
#formRef="ngForm"
[formGroup]="currencyForm"
fxLayout="row"
fxLayoutAlign="start baseline"
fxLayoutGap="20px"
fxFlex="48%"
(ngSubmit)="addCurrency()"
>
<mat-form-field fxFlex="calc(90%-20px)">
<mat-label>{{ 'labels.inputs.Currency' | translate }}</mat-label>
<mat-select required formControlName="currency">
<mat-option>
<ngx-mat-select-search [formControl]="filterFormCtrl"></ngx-mat-select-search>
</mat-option>
<mat-option *ngFor="let currency of currencyData | async" [value]="currency">
({{currency.code}}) {{ currency.name }}
</mat-option>
</mat-select>
<mat-error *ngIf="currencyForm.controls.currency.hasError('required')">
{{ 'labels.inputs.Currency' | translate }} {{ "labels.commons.is" |translate}} <strong>{{ "labels.commons.required" |translate}}</strong>
</mat-error>
<mat-label>{{ 'labels.inputs.Currency' | translate }}</mat-label>
<mat-select required formControlName="currency">
<mat-option>
<ngx-mat-select-search [formControl]="filterFormCtrl"></ngx-mat-select-search>
</mat-option>
<mat-option *ngFor="let currency of currencyData | async" [value]="currency">
({{ currency.code }}) {{ currency.name }}
</mat-option>
</mat-select>
<mat-error *ngIf="currencyForm.controls.currency.hasError('required')">
{{ 'labels.inputs.Currency' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<button mat-raised-button fxFlex color="primary"
[disabled]="!currencyForm.valid" *mifosxHasPermission="'UPDATE_CURRENCY'">
<button
mat-raised-button
fxFlex
color="primary"
[disabled]="!currencyForm.valid"
*mifosxHasPermission="'UPDATE_CURRENCY'"
>
<fa-icon icon="plus"></fa-icon>
</button>
</form>
</div>
<mat-grid-list cols="2" rowHeight="50px">
<mat-grid-tile *ngFor="let currency of selectedCurrencies; index as i">
<input matInput [value]="currency.name">
<input matInput [value]="currency.name" />
<div fxLayout="row" fxLayoutAlign="flex-start">
<button mat-button color="warn" (click)="deleteCurrency(currency.code, i)" *mifosxHasPermission="'UPDATE_CURRENCY'">
<button
mat-button
color="warn"
(click)="deleteCurrency(currency.code, i)"
*mifosxHasPermission="'UPDATE_CURRENCY'"
>
<fa-icon icon="trash"></fa-icon>
</button>
</div>
</mat-grid-tile>
</mat-grid-list>
</mat-card>
</div>
<ng-template #templateCurrencyFormRef let-popover="popover">
<h4>{{'labels.heading.Add Currency Form' | translate }}</h4>
<p class="mw400">{{ 'labels.text.Used to add currency' | translate }}: <a href="https://mifosforge.jira.com/wiki/spaces/docs/pages/67141734/Currency+Configuration" target="_blank">{{ 'labels.inputs.Currency Configuration' | translate }}</a></p>
<h4>{{ 'labels.heading.Add Currency Form' | translate }}</h4>
<p class="mw400">
{{ 'labels.text.Used to add currency' | translate }}:
<a href="https://mifosforge.jira.com/wiki/spaces/docs/pages/67141734/Currency+Configuration" target="_blank">{{
'labels.inputs.Currency Configuration' | translate
}}</a>
</p>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn" (click)="popover.close();configurationWizardService.closeConfigWizard()">{{"labels.buttons.Close' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();">{{"labels.buttons.Add Currency' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();previousStep()">{{"labels.buttons.Back' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();nextStep()">{{"labels.buttons.Next' | translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{"labels.buttons.Close' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close()">
{{"labels.buttons.Add Currency' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); previousStep()">
{{"labels.buttons.Back' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); nextStep()">
{{"labels.buttons.Next' | translate }}
</button>
</div>
</ng-template>
@@ -1,13 +1,8 @@
<div class="container">
<mat-card>
<form [formGroup]="employeeForm" (ngSubmit)="submit()">
<mat-card-content>
<div #createEmployeeFormRef fxLayout="column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.Office' | translate }}</mat-label>
<mat-select required formControlName="officeId">
@@ -16,73 +11,104 @@
</mat-option>
</mat-select>
<mat-error *ngIf="employeeForm.controls.officeId.hasError('required')">
{{'labels.inputs.Office' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{'labels.inputs.First Name' | translate }}</mat-label>
<input matInput required formControlName="firstname">
<mat-error *ngIf="employeeForm.controls.firstname.hasError('required')">
{{'labels.inputs.First Name' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
</mat-error>
<mat-error *ngIf="employeeForm.controls.firstname.hasError('pattern')">
{{'labels.inputs.First Name' | translate }} <strong>{{'labels.inputs.cannot' | translate }}</strong> {{'labels.inputs.begin with a special character or number' | translate }}
{{ 'labels.inputs.Office' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{'labels.inputs.Last Name' | translate }}</mat-label>
<input matInput required formControlName="lastname">
<mat-label>{{ 'labels.inputs.First Name' | translate }}</mat-label>
<input matInput required formControlName="firstname" />
<mat-error *ngIf="employeeForm.controls.firstname.hasError('required')">
{{ 'labels.inputs.First Name' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
<mat-error *ngIf="employeeForm.controls.firstname.hasError('pattern')">
{{ 'labels.inputs.First Name' | translate }} <strong>{{ 'labels.inputs.cannot' | translate }}</strong>
{{ 'labels.inputs.begin with a special character or number' | translate }}
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{ 'labels.inputs.Last Name' | translate }}</mat-label>
<input matInput required formControlName="lastname" />
<mat-error *ngIf="employeeForm.controls.lastname.hasError('required')">
{{'labels.inputs.Last Name' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Last Name' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
<mat-error *ngIf="employeeForm.controls.lastname.hasError('pattern')">
{{'labels.inputs.Last Name' | translate }} <strong>{{'labels.inputs.cannot' | translate }}</strong> {{'labels.inputs.begin with a special character or number' | translate }}
{{ 'labels.inputs.Last Name' | translate }} <strong>{{ 'labels.inputs.cannot' | translate }}</strong>
{{ 'labels.inputs.begin with a special character or number' | translate }}
</mat-error>
</mat-form-field>
<mat-checkbox labelPosition="before" formControlName="isLoanOfficer" class="loan-officer">
{{'labels.inputs.Is Loan Officer' | translate }}
{{ 'labels.inputs.Is Loan Officer' | translate }}
</mat-checkbox>
<mat-form-field>
<mat-label>{{'labels.inputs.Mobile Number for SMS' | translate }}</mat-label>
<input matInput formControlName="mobileNo">
<mat-label>{{ 'labels.inputs.Mobile Number for SMS' | translate }}</mat-label>
<input matInput formControlName="mobileNo" />
</mat-form-field>
<mat-form-field (click)="joiningDatePicker.open()">
<mat-label>{{'labels.inputs.Joining Date' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="joiningDatePicker" required formControlName="joiningDate">
<mat-label>{{ 'labels.inputs.Joining Date' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="joiningDatePicker"
required
formControlName="joiningDate"
/>
<mat-datepicker-toggle matSuffix [for]="joiningDatePicker"></mat-datepicker-toggle>
<mat-datepicker #joiningDatePicker></mat-datepicker>
<mat-error *ngIf="employeeForm.controls.joiningDate.hasError('required')">
{{'labels.inputs.Joining Date' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Joining Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../']">{{'labels.buttons.Cancel' | translate }}</button>
<button mat-raised-button color="primary" [disabled]="!employeeForm.valid" *mifosxHasPermission="'CREATE_STAFF'">{{'labels.buttons.Submit' | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!employeeForm.valid"
*mifosxHasPermission="'CREATE_STAFF'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</form>
</mat-card>
</div>
<ng-template #templateCreateEmployeeForm let-popover="popover">
<h2>{{ 'labels.heading.Create Employee' | translate }}</h2>
<p class="mw400">{{'labels.text.Start filling the details' | translate }} <br> {{'labels.text.For more details click' | translate }}: <a href="https://mifosforge.jira.com/wiki/spaces/docs/pages/67141732/Manage+Employees" target="_blank">{{'labels.inputs.Manage Employees' | translate }}</a></p>
<p class="mw400">
{{ 'labels.text.Start filling the details' | translate }} <br />
{{ 'labels.text.For more details click' | translate }}:
<a href="https://mifosforge.jira.com/wiki/spaces/docs/pages/67141732/Manage+Employees" target="_blank">{{
'labels.inputs.Manage Employees' | translate
}}</a>
</p>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn" (click)="popover.close();configurationWizardService.closeConfigWizard()">{{'labels.buttons.Close' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close()">{{'labels.buttons.Create Employee' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();previousStep()">{{'labels.buttons.Back' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();nextStep()">{{'labels.buttons.Next' | translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close()">
{{ 'labels.buttons.Create Employee' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); previousStep()">
{{ 'labels.buttons.Back' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); nextStep()">
{{ 'labels.buttons.Next' | translate }}
</button>
</div>
</ng-template>
@@ -1,13 +1,8 @@
<div class="container">
<mat-card>
<form [formGroup]="editEmployeeForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.Office' | translate }}</mat-label>
<mat-select required formControlName="officeId">
@@ -16,66 +11,83 @@
</mat-option>
</mat-select>
<mat-error *ngIf="editEmployeeForm.controls.officeId.hasError('required')">
{{'labels.inputs.Office' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Office' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{'labels.inputs.First Name' | translate }}</mat-label>
<input matInput required formControlName="firstname">
<mat-label>{{ 'labels.inputs.First Name' | translate }}</mat-label>
<input matInput required formControlName="firstname" />
<mat-error *ngIf="editEmployeeForm.controls.firstname.hasError('required')">
{{'labels.inputs.First Name' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.First Name' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
<mat-error *ngIf="editEmployeeForm.controls.firstname.hasError('pattern')">
{{'labels.inputs.First Name' | translate }} <strong>{{'labels.inputs.cannot' | translate }}</strong> {{'labels.inputs.begin with a special character or number' | translate }}
{{ 'labels.inputs.First Name' | translate }} <strong>{{ 'labels.inputs.cannot' | translate }}</strong>
{{ 'labels.inputs.begin with a special character or number' | translate }}
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{'labels.inputs.Last Name' | translate }}</mat-label>
<input matInput required formControlName="lastname">
<mat-label>{{ 'labels.inputs.Last Name' | translate }}</mat-label>
<input matInput required formControlName="lastname" />
<mat-error *ngIf="editEmployeeForm.controls.lastname.hasError('required')">
{{'labels.inputs.Last Name' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Last Name' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
<mat-error *ngIf="editEmployeeForm.controls.lastname.hasError('pattern')">
{{'labels.inputs.Last Name' | translate }} <strong>{{'labels.inputs.cannot' | translate }}</strong> {{'labels.inputs.begin with a special character or number' | translate }}
{{ 'labels.inputs.Last Name' | translate }} <strong>{{ 'labels.inputs.cannot' | translate }}</strong>
{{ 'labels.inputs.begin with a special character or number' | translate }}
</mat-error>
</mat-form-field>
<mat-checkbox labelPosition="before" formControlName="isLoanOfficer" class="m-b-10">
{{'labels.inputs.Is Loan Officer' | translate }}
{{ 'labels.inputs.Is Loan Officer' | translate }}
</mat-checkbox>
<mat-form-field>
<mat-label>{{'labels.inputs.Mobile Number for SMS' | translate }}</mat-label>
<input matInput formControlName="mobileNo">
<mat-label>{{ 'labels.inputs.Mobile Number for SMS' | translate }}</mat-label>
<input matInput formControlName="mobileNo" />
</mat-form-field>
<mat-checkbox labelPosition="before" formControlName="isActive">
{{'labels.inputs.Active' | translate }}
{{ 'labels.inputs.Active' | translate }}
</mat-checkbox>
<mat-form-field (click)="joiningDatePicker.open()">
<mat-label>{{'labels.inputs.Joining Date' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="joiningDatePicker" required formControlName="joiningDate">
<mat-label>{{ 'labels.inputs.Joining Date' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="joiningDatePicker"
required
formControlName="joiningDate"
/>
<mat-datepicker-toggle matSuffix [for]="joiningDatePicker"></mat-datepicker-toggle>
<mat-datepicker #joiningDatePicker></mat-datepicker>
<mat-error *ngIf="editEmployeeForm.controls.joiningDate.hasError('required')">
{{'labels.inputs.Joining Date' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Joining Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../']">{{'labels.buttons.Cancel' | translate }}</button>
<button mat-raised-button color="primary" [disabled]="!editEmployeeForm.valid" *mifosxHasPermission="'UPDATE_STAFF'">{{'labels.buttons.Submit' | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!editEmployeeForm.valid"
*mifosxHasPermission="'UPDATE_STAFF'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</form>
</mat-card>
</div>
@@ -1,107 +1,169 @@
<div class="container m-b-20" fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px">
<div #buttonImportEmployees>
<button mat-raised-button color="primary" *mifosxHasPermission="'CREATE_STAFF'" [routerLink]="['/', 'organization', 'bulk-import', 'Employees']">
<fa-icon icon="upload" class="m-r-10"></fa-icon>
{{'labels.buttons.Import Employees' | translate }}
</button>
<button
mat-raised-button
color="primary"
*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-raised-button color="primary" [routerLink]="['create']" *mifosxHasPermission="'CREATE_STAFF'">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{'labels.buttons.Create Employee' | translate }}
</button>
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Create Employee' | translate }}
</button>
</div>
</div>
<div class="container">
<div #filter fxLayout="row" fxLayoutGap="20px">
<mat-form-field fxFlex>
<mat-label>{{ 'labels.inputs.Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
</div>
<div #filter fxLayout="row" fxLayoutGap="20px">
<mat-form-field fxFlex>
<mat-label>{{'labels.inputs.Filter' | translate}}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)">
</mat-form-field>
</div>
<div #tableEmployees class="mat-elevation-z8">
<table mat-table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="displayName">
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.name' | translate }}</th>
<td mat-cell *matCellDef="let employee">{{ employee.displayName }}</td>
</ng-container>
<div #tableEmployees class="mat-elevation-z8">
<ng-container matColumnDef="isLoanOfficer">
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Loan Officer' | translate }}</th>
<td mat-cell *matCellDef="let employee">
<div [className]="employee.isLoanOfficer === true ? 'true' : 'false'">
<fa-icon
*ngIf="employee.isLoanOfficer"
icon="check-circle"
size="lg"
matTooltip="{{ 'tooltips.Yes' | translate }}"
matTooltipPosition="right"
></fa-icon>
<fa-icon
*ngIf="!employee.isLoanOfficer"
icon="times-circle"
size="lg"
matTooltip="{{ 'tooltips.No' | translate }}"
matTooltipPosition="right"
></fa-icon>
</div>
</td>
</ng-container>
<table mat-table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="officeName">
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Office' | translate }}</th>
<td mat-cell *matCellDef="let employees">{{ employees.officeName }}</td>
</ng-container>
<ng-container matColumnDef="displayName">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{'labels.inputs.name' | translate }} </th>
<td mat-cell *matCellDef="let employee"> {{ employee.displayName }} </td>
</ng-container>
<ng-container matColumnDef="isActive">
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Status' | translate }}</th>
<td mat-cell *matCellDef="let employee">
<div [className]="employee.isActive === true ? 'true' : 'false'">
<fa-icon
matTooltip="{{ employee.isActive === true ? 'Active' : 'Inactive' }}"
matTooltipPosition="right"
icon="circle"
size="lg"
></fa-icon>
</div>
</td>
</ng-container>
<ng-container matColumnDef="isLoanOfficer">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{'labels.inputs.Loan Officer' | translate }} </th>
<td mat-cell *matCellDef="let employee">
<div [className]="employee.isLoanOfficer === true ? 'true' : 'false'">
<fa-icon *ngIf="employee.isLoanOfficer" icon="check-circle" size="lg" matTooltip="{{ 'tooltips.Yes' | translate }}" matTooltipPosition="right"></fa-icon>
<fa-icon *ngIf="!employee.isLoanOfficer" icon="times-circle" size="lg" matTooltip="{{ 'tooltips.No' | translate }}" matTooltipPosition="right"></fa-icon>
</div>
</td>
</ng-container>
<ng-container matColumnDef="officeName">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{'labels.inputs.Office' | translate }} </th>
<td mat-cell *matCellDef="let employees"> {{ employees.officeName }} </td>
</ng-container>
<ng-container matColumnDef="isActive">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{'labels.inputs.Status' | translate }} </th>
<td mat-cell *matCellDef="let employee">
<div [className]="employee.isActive === true ? 'true' : 'false'">
<fa-icon matTooltip="{{ employee.isActive === true ? 'Active' : 'Inactive' }}" matTooltipPosition="right" icon="circle" size="lg"></fa-icon>
</div>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;" [routerLink]="[row.id]" class="select-row"></tr>
</table>
<mat-paginator [pageSizeOptions]="[10, 25, 50, 100]" showFirstLastButtons></mat-paginator>
</div>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns" [routerLink]="[row.id]" class="select-row"></tr>
</table>
<mat-paginator [pageSizeOptions]="[10, 25, 50, 100]" showFirstLastButtons></mat-paginator>
</div>
</div>
<ng-template #templateButtonImportEmployees let-data let-popover="popover">
<h2>{{ 'labels.heading.Import Employees' | translate }}</h2>
<p class="mw300">{{'labels.text.Import employee details from your local device' | translate }}</p>
<p class="mw300">{{ 'labels.text.Import employee details from your local device' | translate }}</p>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn" (click)="popover.close();configurationWizardService.closeConfigWizard()">{{'labels.buttons.Close' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();previousStep()">{{'labels.buttons.Back' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();showPopover(templateButtonCreateEmployee,buttonCreateEmployee,'bottom', true)">{{'labels.buttons.Next' | translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); previousStep()">
{{ 'labels.buttons.Back' | translate }}
</button>
<button
mat-raised-button
color="primary"
(click)="popover.close(); showPopover(templateButtonCreateEmployee, buttonCreateEmployee, 'bottom', true)"
>
{{ 'labels.buttons.Next' | translate }}
</button>
</div>
</ng-template>
<ng-template #templateButtonCreateEmployee let-popover="popover">
<h2>{{ 'labels.heading.Create Employee' | translate }}</h2>
<p class="mw300">{{'labels.text.Create new employees in your organization' | translate }}</p>
<p class="mw300">{{ 'labels.text.Create new employees in your organization' | translate }}</p>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn" (click)="popover.close();configurationWizardService.closeConfigWizard()">{{'labels.buttons.Close' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();showPopover(templateButtonImportEmployees,buttonImportEmployees,'bottom', true)">{{'labels.buttons.Back' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();showPopover(templateFilter,filter,'bottom', true)">{{'labels.buttons.Next' | translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
<button
mat-raised-button
color="primary"
(click)="popover.close(); showPopover(templateButtonImportEmployees, buttonImportEmployees, 'bottom', true)"
>
{{ 'labels.buttons.Back' | translate }}
</button>
<button
mat-raised-button
color="primary"
(click)="popover.close(); showPopover(templateFilter, filter, 'bottom', true)"
>
{{ 'labels.buttons.Next' | translate }}
</button>
</div>
</ng-template>
<ng-template #templateFilter let-popover="popover">
<h4>{{ 'labels.heading.Search bar to filter employees.' | translate }}</h4>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn" (click)="popover.close();configurationWizardService.closeConfigWizard()">{{'labels.buttons.Close' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();showPopover(templateButtonCreateEmployee,buttonCreateEmployee,'bottom', true)">{{'labels.buttons.Back' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();showPopover(templateTableEmployees,tableEmployees,'top', true)">{{'labels.buttons.Next' | translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
<button
mat-raised-button
color="primary"
(click)="popover.close(); showPopover(templateButtonCreateEmployee, buttonCreateEmployee, 'bottom', true)"
>
{{ 'labels.buttons.Back' | translate }}
</button>
<button
mat-raised-button
color="primary"
(click)="popover.close(); showPopover(templateTableEmployees, tableEmployees, 'top', true)"
>
{{ 'labels.buttons.Next' | translate }}
</button>
</div>
</ng-template>
<ng-template #templateTableEmployees let-popover="popover">
<h4>{{ 'labels.heading.List of employees in the organization.' | translate }}</h4>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn" (click)="popover.close();configurationWizardService.closeConfigWizard()">{{'labels.buttons.Close' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();showPopover(templateFilter,filter,'bottom', true)">{{'labels.buttons.Back' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();nextStep()">{{'labels.buttons.Next' | translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
<button
mat-raised-button
color="primary"
(click)="popover.close(); showPopover(templateFilter, filter, 'bottom', true)"
>
{{ 'labels.buttons.Back' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); nextStep()">
{{ 'labels.buttons.Next' | translate }}
</button>
</div>
</ng-template>
@@ -1,20 +1,16 @@
<div class="container m-b-20" fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px">
<button mat-raised-button color="primary" [routerLink]="['edit']" *mifosxHasPermission="'UPDATE_STAFF'">
<fa-icon icon="edit" class="m-r-10"></fa-icon>
{{'labels.buttons.Edit' | translate }}
{{ 'labels.buttons.Edit' | translate }}
</button>
</div>
<div class="container">
<mat-card>
<mat-card-content>
<div fxLayout="row wrap" class="content">
<div fxFlex="50%" class="mat-body-strong">
{{'labels.inputs.First Name' | translate }}
{{ 'labels.inputs.First Name' | translate }}
</div>
<div fxFlex="50%">
@@ -22,7 +18,7 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{'labels.inputs.Last Name' | translate }}
{{ 'labels.inputs.Last Name' | translate }}
</div>
<div fxFlex="50%">
@@ -30,7 +26,7 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{'labels.inputs.Office' | translate }}
{{ 'labels.inputs.Office' | translate }}
</div>
<div fxFlex="50%">
@@ -38,7 +34,7 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{'labels.inputs.Is Loan Officer' | translate }}
{{ 'labels.inputs.Is Loan Officer' | translate }}
</div>
<div fxFlex="50%">
@@ -46,7 +42,7 @@
</div>
<div fxFlex="50%" class="mat-body-strong" *ngIf="employeeData.mobileNo">
{{'labels.inputs.Mobile Number for SMS' | translate }}
{{ 'labels.inputs.Mobile Number for SMS' | translate }}
</div>
<div fxFlex="50%" *ngIf="employeeData.mobileNo">
@@ -54,7 +50,7 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{'labels.inputs.Status' | translate }}
{{ 'labels.inputs.Status' | translate }}
</div>
<div fxFlex="50%">
@@ -62,17 +58,13 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{'labels.inputs.Joining Date' | translate }}
{{ 'labels.inputs.Joining Date' | translate }}
</div>
<div fxFlex="50%">
{{ employeeData.joiningDate | dateFormat }}
</div>
</div>
</mat-card-content>
</mat-card>
</div>
@@ -1,22 +1,18 @@
<div class="container">
<mat-card>
<form [formGroup]="createEntityForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.Entity' | translate }}</mat-label>
<mat-select required formControlName="entity">
<mat-option *ngFor="let entity of entityTypes" [value]="entity.value">
{{ entity.name }}
{{ entity.name }}
</mat-option>
</mat-select>
<mat-error *ngIf="createEntityForm.controls.entity.hasError('required')">
{{ 'labels.inputs.Entity' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Entity' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -24,11 +20,12 @@
<mat-label>{{ 'labels.inputs.Status' | translate }}</mat-label>
<mat-select required formControlName="status">
<mat-option *ngFor="let status of statusList" [value]="status.code">
{{ status.name }}
{{ status.name }}
</mat-option>
</mat-select>
<mat-error *ngIf="createEntityForm.controls.status.hasError('required')">
{{ 'labels.inputs.Status' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Status' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -36,11 +33,12 @@
<mat-label>{{ 'labels.inputs.Data Table' | translate }}</mat-label>
<mat-select required formControlName="datatableName">
<mat-option *ngFor="let dataTable of dataTableList" [value]="dataTable.dataTableName">
{{ dataTable.dataTableName }}
{{ dataTable.dataTableName }}
</mat-option>
</mat-select>
<mat-error *ngIf="createEntityForm.controls.datatableName.hasError('required')">
{{ 'labels.inputs.Data Table' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Data Table' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -48,37 +46,41 @@
<mat-label>{{ 'labels.inputs.Products' | translate }}</mat-label>
<mat-select required formControlName="productId">
<mat-option *ngFor="let loanProducts of createEntityData.loanProductDatas" [value]="loanProducts.id">
{{ loanProducts.name }}
{{ loanProducts.name }}
</mat-option>
</mat-select>
<mat-error *ngIf="createEntityForm.controls.productId.hasError('required')">
{{ 'labels.inputs.Loan Product' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Loan Product' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field *ngIf="entityType === 'm_savings_account'">
<mat-label>{{ 'labels.inputs.Products' | translate }}</mat-label>
<mat-select required formControlName="productId">
<mat-option *ngFor="let savingsProducts of createEntityData.savingsProductDatas" [value]="savingsProducts.id">
{{ savingsProducts.name }}
<mat-option
*ngFor="let savingsProducts of createEntityData.savingsProductDatas"
[value]="savingsProducts.id"
>
{{ savingsProducts.name }}
</mat-option>
</mat-select>
<mat-error *ngIf="createEntityForm.controls.productId.hasError('required')">
{{ 'labels.inputs.Loan Product' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Loan Product' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../']">{{'labels.buttons.Cancel' | translate }}</button>
<button mat-raised-button color="primary" [disabled]="!createEntityForm.valid">{{'labels.buttons.Submit' | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button mat-raised-button color="primary" [disabled]="!createEntityForm.valid">
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</form>
</mat-card>
</div>
@@ -1,71 +1,85 @@
<div class="container m-b-20" fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px">
<button mat-raised-button color="primary" [routerLink]="['create']" *mifosxHasPermission="'CREATE_ENTITY_DATATABLE_CHECK'">
<button
mat-raised-button
color="primary"
[routerLink]="['create']"
*mifosxHasPermission="'CREATE_ENTITY_DATATABLE_CHECK'"
>
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{'labels.buttons.Create' | translate }}
{{ 'labels.buttons.Create' | translate }}
</button>
</div>
<div class="container">
<div fxLayout="row" fxLayoutGap="20px">
<mat-form-field fxFlex>
<mat-label>{{'labels.inputs.Filter' | translate}}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)">
<mat-label>{{ 'labels.inputs.Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
</div>
<div class="mat-elevation-z8">
<table mat-table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="entity">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Entity' | translate }} </th>
<td mat-cell *matCellDef="let entityDataTableCheck"> {{ entityDataTableCheck.entity }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Entity' | translate }}</th>
<td mat-cell *matCellDef="let entityDataTableCheck">{{ entityDataTableCheck.entity }}</td>
</ng-container>
<ng-container matColumnDef="productName">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Product Name' | translate }} </th>
<td mat-cell *matCellDef="let entityDataTableCheck"> {{ entityDataTableCheck.productName }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Product Name' | translate }}</th>
<td mat-cell *matCellDef="let entityDataTableCheck">{{ entityDataTableCheck.productName }}</td>
</ng-container>
<ng-container matColumnDef="datatableName">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Data Table' | translate }} </th>
<td mat-cell *matCellDef="let entityDataTableCheck"> {{ entityDataTableCheck.datatableName }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Data Table' | translate }}</th>
<td mat-cell *matCellDef="let entityDataTableCheck">{{ entityDataTableCheck.datatableName }}</td>
</ng-container>
<ng-container matColumnDef="status">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Status' | translate }} </th>
<td mat-cell *matCellDef="let entityDataTableCheck"> {{ entityDataTableCheck.status.value }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Status' | translate }}</th>
<td mat-cell *matCellDef="let entityDataTableCheck">{{ entityDataTableCheck.status.value }}</td>
</ng-container>
<ng-container matColumnDef="systemDefined">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.System Defined' | translate }} </th>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.System Defined' | translate }}</th>
<td mat-cell *matCellDef="let entityDataTableCheck">
<div [className]="entityDataTableCheck.systemDefined === true ? 'true' : 'false'">
<fa-icon *ngIf="entityDataTableCheck.systemDefined" icon="check-circle" size="lg" matTooltip="{{ 'tooltips.Yes' | translate }}" matTooltipPosition="right"></fa-icon>
<fa-icon *ngIf="!entityDataTableCheck.systemDefined" icon="times-circle" size="lg" matTooltip="{{ 'tooltips.No' | translate }}" matTooltipPosition="right"></fa-icon>
<fa-icon
*ngIf="entityDataTableCheck.systemDefined"
icon="check-circle"
size="lg"
matTooltip="{{ 'tooltips.Yes' | translate }}"
matTooltipPosition="right"
></fa-icon>
<fa-icon
*ngIf="!entityDataTableCheck.systemDefined"
icon="times-circle"
size="lg"
matTooltip="{{ 'tooltips.No' | translate }}"
matTooltipPosition="right"
></fa-icon>
</div>
</td>
</ng-container>
<ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Actions' | translate }} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Actions' | translate }}</th>
<td mat-cell *matCellDef="let entityDataTableCheck">
<button mat-button (click)="deleteEntityDataTableCheck(entityDataTableCheck.id)" color="warn" *mifosxHasPermission="'DELETE_ENTITY_DATATABLE_CHECK'">
<fa-icon icon="trash" class="m-r-10"></fa-icon>{{'labels.buttons.Delete' | translate }}
<button
mat-button
(click)="deleteEntityDataTableCheck(entityDataTableCheck.id)"
color="warn"
*mifosxHasPermission="'DELETE_ENTITY_DATATABLE_CHECK'"
>
<fa-icon icon="trash" class="m-r-10"></fa-icon>{{ 'labels.buttons.Delete' | translate }}
</button>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
</table>
<mat-paginator [pageSizeOptions]="[10, 25, 50, 100]" showFirstLastButtons></mat-paginator>
</div>
</div>
@@ -1,9 +1,6 @@
<mat-card class="container" *ngIf="!isCollapsed">
<form [formGroup]="fundMappingForm" (ngSubmit)="submit()">
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column" fxLayoutAlign.gt-sm="start center">
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Loan Status' | translate }}</mat-label>
<mat-select formControlName="loanStatus" multiple>
@@ -25,7 +22,7 @@
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Office' | translate }}</mat-label>
<mat-select formControlName="offices" multiple>
@@ -46,32 +43,58 @@
<mat-form-field fxFlex="31%" (click)="fromDatePicker.open()">
<mat-label>{{ 'labels.inputs.From Date' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="fromDatePicker"
required formControlName="loanFromDate" required>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="fromDatePicker"
required
formControlName="loanFromDate"
required
/>
<mat-datepicker-toggle matSuffix [for]="fromDatePicker"></mat-datepicker-toggle>
<mat-datepicker #fromDatePicker></mat-datepicker>
<mat-error *ngIf="fundMappingForm.controls.loanFromDate.hasError('required')">
{{ 'labels.inputs.From Date' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.From Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="31%" (click)="toDatePicker.open()">
<mat-label>{{ 'labels.inputs.To Date' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="toDatePicker"
required formControlName="loanToDate" required>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="toDatePicker"
required
formControlName="loanToDate"
required
/>
<mat-datepicker-toggle matSuffix [for]="toDatePicker"></mat-datepicker-toggle>
<mat-datepicker #toDatePicker></mat-datepicker>
<mat-error *ngIf="fundMappingForm.controls.loanToDate.hasError('required')">
{{ 'labels.inputs.To Date' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.To Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-checkbox fxFlex="73%" labelPosition="before" formControlName="includeOutStandingAmountPercentage" class="margin-b">
<mat-checkbox
fxFlex="73%"
labelPosition="before"
formControlName="includeOutStandingAmountPercentage"
class="margin-b"
>
{{ 'labels.inputs.Loan Outstanding Percentage' | translate }}
</mat-checkbox>
<div *ngIf="fundMappingForm.value.includeOutStandingAmountPercentage" fxFlexFill fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<div
*ngIf="fundMappingForm.value.includeOutStandingAmountPercentage"
fxFlexFill
fxLayout="row wrap"
fxLayoutGap="2%"
fxLayout.lt-md="column"
>
<mat-form-field *ngIf="fundMappingForm.contains('outStandingAmountPercentageCondition')" fxFlex="31%">
<mat-label>{{ 'labels.inputs.Comparison Condition' | translate }}</mat-label>
<mat-select required formControlName="outStandingAmountPercentageCondition">
@@ -83,42 +106,50 @@
<mat-option value="=">=</mat-option>
</mat-select>
<mat-error *ngIf="fundMappingForm.controls.outStandingAmountPercentageCondition.hasError('required')">
{{ 'labels.inputs.Comparison Condition' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Comparison Condition' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field *ngIf="fundMappingForm.contains('minOutStandingAmountPercentage')" fxFlex="31%">
<mat-label>{{ 'labels.inputs.Minimum Value' | translate }}</mat-label>
<input type="number" matInput required formControlName="minOutStandingAmountPercentage">
<input type="number" matInput required formControlName="minOutStandingAmountPercentage" />
<mat-error *ngIf="fundMappingForm.controls.minOutStandingAmountPercentage.hasError('required')">
{{ 'labels.inputs.Minimum Value' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Minimum Value' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field *ngIf="fundMappingForm.contains('outStandingAmountPercentage')" fxFlex="31%">
<mat-label>{{ 'labels.inputs.Comparison Value' | translate }}</mat-label>
<input type="number" matInput required formControlName="outStandingAmountPercentage">
<input type="number" matInput required formControlName="outStandingAmountPercentage" />
<mat-error *ngIf="fundMappingForm.controls.outStandingAmountPercentage.hasError('required')">
{{ 'labels.inputs.Comparison Value' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Comparison Value' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field *ngIf="fundMappingForm.contains('maxOutStandingAmountPercentage')" fxFlex="31%">
<mat-label>{{ 'labels.inputs.Maximum Value' | translate }}</mat-label>
<input type="number" matInput required formControlName="maxOutStandingAmountPercentage">
<input type="number" matInput required formControlName="maxOutStandingAmountPercentage" />
<mat-error *ngIf="fundMappingForm.controls.maxOutStandingAmountPercentage.hasError('required')">
{{ 'labels.inputs.Maximum Value' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Maximum Value' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
</div>
<mat-checkbox fxFlex="73%" labelPosition="before" formControlName="includeOutstandingAmount" class="margin-b">
{{ 'labels.inputs.Loan Outstanding Amount' | translate }}
</mat-checkbox>
<div *ngIf="fundMappingForm.value.includeOutstandingAmount" fxFlexFill fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<div
*ngIf="fundMappingForm.value.includeOutstandingAmount"
fxFlexFill
fxLayout="row wrap"
fxLayoutGap="2%"
fxLayout.lt-md="column"
>
<mat-form-field *ngIf="fundMappingForm.contains('outstandingAmountCondition')" fxFlex="31%">
<mat-label>{{ 'labels.inputs.Comparison Condition' | translate }}</mat-label>
<mat-select required formControlName="outstandingAmountCondition">
@@ -130,94 +161,87 @@
<mat-option value="=">=</mat-option>
</mat-select>
<mat-error *ngIf="fundMappingForm.controls.outstandingAmountCondition.hasError('required')">
{{ 'labels.inputs.Comparison Condition' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Comparison Condition' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field *ngIf="fundMappingForm.contains('minOutstandingAmount')" fxFlex="31%">
<mat-label>{{ 'labels.inputs.Minimum Value' | translate }}</mat-label>
<input type="number" matInput required formControlName="minOutstandingAmount">
<input type="number" matInput required formControlName="minOutstandingAmount" />
<mat-error *ngIf="fundMappingForm.controls.minOutstandingAmount.hasError('required')">
{{ 'labels.inputs.Minimum Value' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Minimum Value' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field *ngIf="fundMappingForm.contains('outstandingAmount')" fxFlex="31%">
<mat-label>{{ 'labels.inputs.Comparison Value' | translate }}</mat-label>
<input type="number" matInput required formControlName="outstandingAmount">
<input type="number" matInput required formControlName="outstandingAmount" />
<mat-error *ngIf="fundMappingForm.controls.outstandingAmount.hasError('required')">
{{ 'labels.inputs.Comparison Value' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Comparison Value' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field *ngIf="fundMappingForm.contains('maxOutstandingAmount')" fxFlex="31%">
<mat-label>{{ 'labels.inputs.Maximum Value' | translate }}</mat-label>
<input type="number" matInput required formControlName="maxOutstandingAmount">
<input type="number" matInput required formControlName="maxOutstandingAmount" />
<mat-error *ngIf="fundMappingForm.controls.maxOutstandingAmount.hasError('required')">
{{ 'labels.inputs.Maximum Value' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Maximum Value' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
</div>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../']">{{'labels.buttons.Cancel' | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../']">{{ 'labels.buttons.Cancel' | translate }}</button>
<button mat-raised-button color="primary" [disabled]="!fundMappingForm.valid">
<fa-icon icon="search"></fa-icon>&nbsp; {{'labels.buttons.Summary' | translate }}
<fa-icon icon="search"></fa-icon>&nbsp; {{ 'labels.buttons.Summary' | translate }}
</button>
</mat-card-actions>
</form>
</form>
</mat-card>
<div class="container" *ngIf="isCollapsed">
<mat-card>
<div class="m-b-20">
<button mat-raised-button color="primary" (click)="isCollapsed = false">
{{'labels.buttons.Parameters' | translate }}
{{ 'labels.buttons.Parameters' | translate }}
</button>
</div>
<table class="mat-elevation-z1" mat-table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="officeName">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Office Name' | translate }} </th>
<td mat-cell *matCellDef="let loan"> {{ loan.officeName }}</td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Office Name' | translate }}</th>
<td mat-cell *matCellDef="let loan">{{ loan.officeName }}</td>
</ng-container>
<ng-container matColumnDef="productName">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Product Name' | translate }} </th>
<td mat-cell *matCellDef="let loan"> {{ loan.loanProductName }}</td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Product Name' | translate }}</th>
<td mat-cell *matCellDef="let loan">{{ loan.loanProductName }}</td>
</ng-container>
<ng-container matColumnDef="count">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Count' | translate }} </th>
<td mat-cell *matCellDef="let loan"> {{ loan.count }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Count' | translate }}</th>
<td mat-cell *matCellDef="let loan">{{ loan.count }}</td>
</ng-container>
<ng-container matColumnDef="outstanding">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Outstanding' | translate }} </th>
<td mat-cell *matCellDef="let loan"> {{ loan.loanOutStanding }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Outstanding' | translate }}</th>
<td mat-cell *matCellDef="let loan">{{ loan.loanOutStanding }}</td>
</ng-container>
<ng-container matColumnDef="percentage">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Percentage' | translate }} </th>
<td mat-cell *matCellDef="let loan"> {{ loan.percentage }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Percentage' | translate }}</th>
<td mat-cell *matCellDef="let loan">{{ loan.percentage }}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
</table>
<mat-paginator [pageSizeOptions]="[10, 25, 50, 100]" showFirstLastButtons></mat-paginator>
</mat-card>
</div>
@@ -1,38 +1,50 @@
<div class="container">
<mat-card>
<form [formGroup]="holidayForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.name' | translate }}</mat-label>
<input matInput required autofocus formControlName="name">
<input matInput required autofocus formControlName="name" />
<mat-error *ngIf="holidayForm.controls.name.hasError('required')">
{{ 'labels.inputs.name' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.name' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field (click)="fromDatePicker.open()">
<mat-label>{{ 'labels.inputs.From Date' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="fromDatePicker" required formControlName="fromDate">
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="fromDatePicker"
required
formControlName="fromDate"
/>
<mat-datepicker-toggle matSuffix [for]="fromDatePicker"></mat-datepicker-toggle>
<mat-datepicker #fromDatePicker></mat-datepicker>
<mat-error *ngIf="holidayForm.controls.fromDate.hasError('required')">
{{ 'labels.inputs.From Date' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.From Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field (click)="toDatePicker.open()">
<mat-label>{{ 'labels.inputs.To Date' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="toDatePicker" required formControlName="toDate">
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="toDatePicker"
required
formControlName="toDate"
/>
<mat-datepicker-toggle matSuffix [for]="toDatePicker"></mat-datepicker-toggle>
<mat-datepicker #toDatePicker></mat-datepicker>
<mat-error *ngIf="holidayForm.controls.toDate.hasError('required')">
{{ 'labels.inputs.To Date' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.To Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -40,62 +52,78 @@
<mat-label>{{ 'labels.inputs.Repayment Scheduling Type' | translate }}</mat-label>
<mat-select required formControlName="reschedulingType">
<mat-option *ngFor="let repayments of repaymentSchedulingTypes" [value]="repayments.id">
{{ repayments.value }}
{{ repayments.value }}
</mat-option>
</mat-select>
<mat-error *ngIf="holidayForm.controls.reschedulingType.hasError('required')">
{{ 'labels.inputs.Repayment Scheduling Type' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Repayment Scheduling Type' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field *ngIf="holidayForm.contains('repaymentsRescheduledTo')" (click)="repaymentDatePicker.open()">
<mat-label>{{ 'labels.inputs.Repayment scheduled to' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="repaymentDatePicker" required formControlName="repaymentsRescheduledTo">
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="repaymentDatePicker"
required
formControlName="repaymentsRescheduledTo"
/>
<mat-datepicker-toggle matSuffix [for]="repaymentDatePicker"></mat-datepicker-toggle>
<mat-datepicker #repaymentDatePicker></mat-datepicker>
<mat-error *ngIf="holidayForm.controls.repaymentsRescheduledTo.hasError('required')">
{{ 'labels.inputs.Repayment scheduled to' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Repayment scheduled to' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{ 'labels.inputs.Description' | translate }}</mat-label>
<input matInput formControlName="description">
</mat-form-field>
<input matInput formControlName="description" />
</mat-form-field>
<label>{{ 'labels.inputs.Select applicable offices' | translate }}</label>
<mat-tree [dataSource]="dataSource" [treeControl]="treeControl">
<mat-tree-node *matTreeNodeDef="let node" matTreeNodeToggle matTreeNodePadding>
<button mat-icon-button disabled></button>
<mat-checkbox class="checklist-leaf-node"
[checked]="checklistSelection.isSelected(node)"
(change)="officeLeafItemSelectionToggle(node);">{{officesDict[node.item].name}}</mat-checkbox>
<mat-checkbox
class="checklist-leaf-node"
[checked]="checklistSelection.isSelected(node)"
(change)="officeLeafItemSelectionToggle(node)"
>{{ officesDict[node.item].name }}</mat-checkbox
>
</mat-tree-node>
<mat-tree-node *matTreeNodeDef="let node; when: hasChild" matTreeNodePadding>
<button type="button" mat-icon-button matTreeNodeToggle
[attr.aria-label]="'toggle ' + node.filename">
<button type="button" mat-icon-button matTreeNodeToggle [attr.aria-label]="'toggle ' + node.filename">
<mat-icon class="mat-icon-rtl-mirror">
{{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}
{{ treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}
</mat-icon>
</button>
<mat-checkbox [checked]="descendantsAllSelected(node)"
(change)="officeItemSelectionToggle(node)">{{ officesDict[node.item].name }}</mat-checkbox>
<mat-checkbox [checked]="descendantsAllSelected(node)" (change)="officeItemSelectionToggle(node)">{{
officesDict[node.item].name
}}</mat-checkbox>
</mat-tree-node>
</mat-tree>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../']">{{'labels.buttons.Cancel' | translate }}</button>
<button mat-raised-button color="primary" [disabled]="!holidayForm.valid" *mifosxHasPermission="'CREATE_HOLIDAY'">{{'labels.buttons.Submit' | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!holidayForm.valid"
*mifosxHasPermission="'CREATE_HOLIDAY'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</form>
</mat-card>
</div>
@@ -1,38 +1,50 @@
<div class="container">
<mat-card>
<form [formGroup]="holidayForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.name' | translate }}</mat-label>
<input matInput required autofocus formControlName="name">
<input matInput required autofocus formControlName="name" />
<mat-error *ngIf="holidayForm.controls.name.hasError('required')">
{{ 'labels.inputs.name' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.name' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field *ngIf="!isActiveHoliday" (click)="fromDatePicker.open()">
<mat-label>{{ 'labels.inputs.From Date' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="fromDatePicker" required formControlName="fromDate">
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="fromDatePicker"
required
formControlName="fromDate"
/>
<mat-datepicker-toggle matSuffix [for]="fromDatePicker"></mat-datepicker-toggle>
<mat-datepicker #fromDatePicker></mat-datepicker>
<mat-error *ngIf="holidayForm.controls.fromDate.hasError('required')">
{{ 'labels.inputs.From Date' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.From Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field *ngIf="!isActiveHoliday" (click)="toDatePicker.open()">
<mat-label>{{ 'labels.inputs.To Date' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="toDatePicker" required formControlName="toDate">
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="toDatePicker"
required
formControlName="toDate"
/>
<mat-datepicker-toggle matSuffix [for]="toDatePicker"></mat-datepicker-toggle>
<mat-datepicker #toDatePicker></mat-datepicker>
<mat-error *ngIf="holidayForm.controls.toDate.hasError('required')">
{{ 'labels.inputs.To Date' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.To Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -44,36 +56,49 @@
</mat-option>
</mat-select>
<mat-error *ngIf="holidayForm.controls.reschedulingType.hasError('required')">
{{ 'labels.inputs.Repayment Scheduling Type' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Repayment Scheduling Type' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field *ngIf="!isActiveHoliday && reSchedulingType === 2" (click)="repaymentDatePicker.open()">
<mat-label>{{ 'labels.inputs.Repayment scheduled to' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="repaymentDatePicker" required formControlName="repaymentsRescheduledTo">
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="repaymentDatePicker"
required
formControlName="repaymentsRescheduledTo"
/>
<mat-datepicker-toggle matSuffix [for]="repaymentDatePicker"></mat-datepicker-toggle>
<mat-datepicker #repaymentDatePicker></mat-datepicker>
<mat-error *ngIf="holidayForm.controls.repaymentsRescheduledTo.hasError('required')">
{{ 'labels.inputs.Repayment scheduled to' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Repayment scheduled to' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{ 'labels.inputs.Description' | translate }}</mat-label>
<input matInput formControlName="description">
<input matInput formControlName="description" />
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../']">{{'labels.buttons.Cancel' | translate }}</button>
<button mat-raised-button color="primary" [disabled]="!holidayForm.valid" *mifosxHasPermission="'UPDATE_HOLIDAY'">{{'labels.buttons.Submit' | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!holidayForm.valid"
*mifosxHasPermission="'UPDATE_HOLIDAY'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</form>
</mat-card>
</div>
@@ -1,21 +1,17 @@
<div class="container m-b-20" fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px">
<div #buttonCreateHoliday class="in-block">
<button mat-raised-button color="primary" [routerLink]="['create']" *mifosxHasPermission="'CREATE_HOLIDAY'">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{'labels.buttons.Create Holiday' | translate }}
</button>
<button mat-raised-button color="primary" [routerLink]="['create']" *mifosxHasPermission="'CREATE_HOLIDAY'">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Create Holiday' | translate }}
</button>
</div>
</div>
<div class="container">
<div #filterRef fxLayout="row" fxLayoutGap="20px">
<mat-form-field fxFlex>
<mat-label>{{'labels.inputs.Filter' | translate}}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)">
<mat-label>{{ 'labels.inputs.Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
<mat-form-field>
<mat-label> {{ 'labels.inputs.Select Office' | translate }} </mat-label>
@@ -25,64 +21,84 @@
</mat-option>
</mat-select>
</mat-form-field>
</div>
<div class="mat-elevation-z8" [hidden]="!officeSelector.value">
<table mat-table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Holiday Name' | translate }} </th>
<td mat-cell *matCellDef="let holidays"> {{ holidays.name }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Holiday Name' | translate }}</th>
<td mat-cell *matCellDef="let holidays">{{ holidays.name }}</td>
</ng-container>
<ng-container matColumnDef="fromDate">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Start Date' | translate }} </th>
<td mat-cell *matCellDef="let holidays"> {{ holidays.fromDate | dateFormat }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Start Date' | translate }}</th>
<td mat-cell *matCellDef="let holidays">{{ holidays.fromDate | dateFormat }}</td>
</ng-container>
<ng-container matColumnDef="toDate">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.End Date' | translate }} </th>
<td mat-cell *matCellDef="let holidays"> {{ holidays.toDate | dateFormat }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.End Date' | translate }}</th>
<td mat-cell *matCellDef="let holidays">{{ holidays.toDate | dateFormat }}</td>
</ng-container>
<ng-container matColumnDef="repaymentsRescheduledTo">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Repayments Scheduled To' | translate }} </th>
<td mat-cell *matCellDef="let holidays"> {{ holidays.reschedulingType === 1 ? 'Next Repayment Date' : holidays.repaymentsRescheduledTo | dateFormat }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>
{{ 'labels.inputs.Repayments Scheduled To' | translate }}
</th>
<td mat-cell *matCellDef="let holidays">
{{
holidays.reschedulingType === 1 ? 'Next Repayment Date' : (holidays.repaymentsRescheduledTo | dateFormat)
}}
</td>
</ng-container>
<ng-container matColumnDef="status">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Status' | translate }} </th>
<td mat-cell *matCellDef="let holidays"> {{ holidays.status.value }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Status' | translate }}</th>
<td mat-cell *matCellDef="let holidays">{{ holidays.status.value }}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;" class="select-row" [routerLink]="[row.id]"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns" class="select-row" [routerLink]="[row.id]"></tr>
</table>
<mat-paginator [pageSizeOptions]="[10, 25, 50, 100]" showFirstLastButtons></mat-paginator>
</div>
</div>
<ng-template #templateButtonCreateHoliday let-popover="popover">
<h2>{{'labels.heading.Create Holiday' | translate }}</h2>
<p class="mw300">{{'labels.text.Create holidays for different offices' | translate }}</p>
<h2>{{ 'labels.heading.Create Holiday' | translate }}</h2>
<p class="mw300">{{ 'labels.text.Create holidays for different offices' | translate }}</p>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn" (click)="popover.close();configurationWizardService.closeConfigWizard()">{{'labels.buttons.Close' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();previousStep();">{{'labels.buttons.Back' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();showPopover(templateFilterRef,filterRef,'bottom', true);">{{'labels.buttons.Next' | translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); previousStep()">
{{ 'labels.buttons.Back' | translate }}
</button>
<button
mat-raised-button
color="primary"
(click)="popover.close(); showPopover(templateFilterRef, filterRef, 'bottom', true)"
>
{{ 'labels.buttons.Next' | translate }}
</button>
</div>
</ng-template>
<ng-template #templateFilterRef let-popover="popover">
<h4>{{'labels.heading.Filter holidays' | translate }}</h4>
<h4>{{ 'labels.heading.Filter holidays' | translate }}</h4>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn" (click)="popover.close();configurationWizardService.closeConfigWizard()">{{'labels.buttons.Close' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();showPopover(templateButtonCreateHoliday,buttonCreateHoliday,'bottom', true);">{{'labels.buttons.Back' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();nextStep();">{{'labels.buttons.Next' | translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
<button
mat-raised-button
color="primary"
(click)="popover.close(); showPopover(templateButtonCreateHoliday, buttonCreateHoliday, 'bottom', true)"
>
{{ 'labels.buttons.Back' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); nextStep()">
{{ 'labels.buttons.Next' | translate }}
</button>
</div>
</ng-template>
@@ -1,68 +1,66 @@
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column" class="container m-b-20">
<span *mifosxHasPermission="'ACTIVATE_HOLIDAY'">
<span *mifosxHasPermission="'ACTIVATE_HOLIDAY'">
<button mat-raised-button color="accent" (click)="activateHoliday()" *ngIf="holidayData.status.value !== 'Active'">
<fa-icon icon="lock-open" class="m-r-10"></fa-icon>
{{'labels.buttons.Activate' | translate }}
{{ 'labels.buttons.Activate' | translate }}
</button>
</span>
<button mat-raised-button color="primary" [routerLink]="['edit']" *mifosxHasPermission="'UPDATE_HOLIDAY'">
<button mat-raised-button color="primary" [routerLink]="['edit']" *mifosxHasPermission="'UPDATE_HOLIDAY'">
<fa-icon icon="edit" class="m-r-10"></fa-icon>
{{'labels.buttons.Edit' | translate }}
{{ 'labels.buttons.Edit' | translate }}
</button>
<button mat-raised-button color="warn" (click)="deleteHoliday()" *mifosxHasPermission="'DELETE_HOLIDAY'">
<button mat-raised-button color="warn" (click)="deleteHoliday()" *mifosxHasPermission="'DELETE_HOLIDAY'">
<fa-icon icon="trash" class="m-r-10"></fa-icon>
{{'labels.buttons.Delete' | translate }}
{{ 'labels.buttons.Delete' | translate }}
</button>
</div>
<div class="container">
<mat-card>
<mat-card-content>
<div fxLayout="row wrap" class="content">
<div fxFlex="50%" class="header">
{{ 'labels.inputs.Name' | translate }}
</div>
<mat-card>
<div fxFlex="50%">
{{ holidayData.name }}
</div>
<mat-card-content>
<div fxFlex="50%" class="header">
{{ 'labels.inputs.From Date' | translate }}
</div>
<div fxLayout="row wrap" class="content">
<div fxFlex="50%">
{{ holidayData.fromDate | dateFormat }}
</div>
<div fxFlex="50%" class="header">
{{ 'labels.inputs.Name' | translate }}
</div>
<div fxFlex="50%" class="header">
{{ 'labels.inputs.To Date' | translate }}
</div>
<div fxFlex="50%">
{{ holidayData.name }}
</div>
<div fxFlex="50%">
{{ holidayData.toDate | dateFormat }}
</div>
<div fxFlex="50%" class="header">
{{ 'labels.inputs.From Date' | translate }}
</div>
<div fxFlex="50%" class="header">
{{ 'labels.inputs.Repayments Scheduled To' | translate }}
</div>
<div fxFlex="50%">
{{ holidayData.fromDate | dateFormat }}
</div>
<div fxFlex="50%" class="header">
{{ 'labels.inputs.To Date' | translate }}
</div>
<div fxFlex="50%">
{{ holidayData.toDate | dateFormat }}
</div>
<div fxFlex="50%" class="header">
{{ 'labels.inputs.Repayments Scheduled To' | translate }}
</div>
<div fxFlex="50%" *ngIf="holidayData.repaymentsRescheduledTo !== undefined && holidayData.repaymentsRescheduledTo !== null">
{{ holidayData.repaymentsRescheduledTo | dateFormat }}
</div>
<div fxFlex="50%" *ngIf="holidayData.repaymentsRescheduledTo === undefined || holidayData.repaymentsRescheduledTo === null">
{{ 'labels.inputs.Next Repayment Date' | translate }}
</div>
</div>
</mat-card-content>
</mat-card>
<div
fxFlex="50%"
*ngIf="holidayData.repaymentsRescheduledTo !== undefined && holidayData.repaymentsRescheduledTo !== null"
>
{{ holidayData.repaymentsRescheduledTo | dateFormat }}
</div>
<div
fxFlex="50%"
*ngIf="holidayData.repaymentsRescheduledTo === undefined || holidayData.repaymentsRescheduledTo === null"
>
{{ 'labels.inputs.Next Repayment Date' | translate }}
</div>
</div>
</mat-card-content>
</mat-card>
</div>
@@ -1,47 +1,65 @@
<mat-card class="container">
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="18%">
<mat-label>{{'labels.text.Search by Text' | translate}}</mat-label>
<input matInput [formControl]="searchText">
<mat-label>{{ 'labels.text.Search by Text' | translate }}</mat-label>
<input matInput [formControl]="searchText" />
</mat-form-field>
<mat-form-field fxFlex="18%" (click)="effectiveFromDatePicker.open()">
<mat-label>{{'labels.text.Effective Date From' | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="effectiveFromDatePicker"
[formControl]="effectiveFromDate">
<mat-label>{{ 'labels.text.Effective Date From' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="effectiveFromDatePicker"
[formControl]="effectiveFromDate"
/>
<mat-datepicker-toggle matSuffix [for]="effectiveFromDatePicker"></mat-datepicker-toggle>
<mat-datepicker #effectiveFromDatePicker></mat-datepicker>
</mat-form-field>
<mat-form-field fxFlex="18%" (click)="effectiveToDatePicker.open()">
<mat-label>{{'labels.text.Effective Date To' | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="effectiveToDatePicker"
[formControl]="effectiveToDate">
<mat-label>{{ 'labels.text.Effective Date To' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="effectiveToDatePicker"
[formControl]="effectiveToDate"
/>
<mat-datepicker-toggle matSuffix [for]="effectiveToDatePicker"></mat-datepicker-toggle>
<mat-datepicker #effectiveToDatePicker></mat-datepicker>
</mat-form-field>
<mat-form-field fxFlex="18%" (click)="settlementFromDatePicker.open()">
<mat-label>{{'labels.text.Settlement Date From' | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="settlementFromDatePicker"
[formControl]="settlementFromDate">
<mat-label>{{ 'labels.text.Settlement Date From' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="settlementFromDatePicker"
[formControl]="settlementFromDate"
/>
<mat-datepicker-toggle matSuffix [for]="settlementFromDatePicker"></mat-datepicker-toggle>
<mat-datepicker #settlementFromDatePicker></mat-datepicker>
</mat-form-field>
<mat-form-field fxFlex="18%" (click)="settlementToDatePicker.open()">
<mat-label>{{'labels.text.Settlement Date To' | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="settlementToDatePicker"
[formControl]="settlementToDate">
<mat-label>{{ 'labels.text.Settlement Date To' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="settlementToDatePicker"
[formControl]="settlementToDate"
/>
<mat-datepicker-toggle matSuffix [for]="settlementToDatePicker"></mat-datepicker-toggle>
<mat-datepicker #settlementToDatePicker></mat-datepicker>
</mat-form-field>
<div fxFlex="98%" class="center m-t-15">
<button mat-raised-button color="primary" (click)="searchEAO()">
<fa-icon icon="search" class="m-r-10"></fa-icon> {{'labels.buttons.Search' | translate}}
<fa-icon icon="search" class="m-r-10"></fa-icon> {{ 'labels.buttons.Search' | translate }}
</button>
</div>
</div>
@@ -51,7 +69,7 @@
<div class="loading"></div>
</div>
<mat-accordion *ngIf="existsDataToFilter">
<mat-expansion-panel *ngFor="let record of searchResults;index as i" class="record">
<mat-expansion-panel *ngFor="let record of searchResults; index as i" class="record">
<mat-expansion-panel-header>
<mat-panel-title>
<table>
@@ -59,23 +77,22 @@
<td>
<div [ngClass]="itemStatus(record.status)" class="m-r-20">
<fa-icon icon="stop"></fa-icon>
<span class="m-l-10 status">{{record.status}}</span>
<span class="m-l-10 status">{{ record.status }}</span>
</div>
</td>
<td class="field-name"> {{'labels.inputs.Owner External Id' | translate}} </td>
<td class="field-name">{{ 'labels.inputs.Owner External Id' | translate }}</td>
<td>
<mifosx-external-identifier externalId="{{record.owner.externalId}}"></mifosx-external-identifier>
<mifosx-external-identifier externalId="{{ record.owner.externalId }}"></mifosx-external-identifier>
</td>
<td class="field-name"> {{'labels.inputs.Transfer External Id' | translate}} </td>
<td class="field-name">{{ 'labels.inputs.Transfer External Id' | translate }}</td>
<td>
<mifosx-external-identifier externalId="{{record.transferExternalId}}"></mifosx-external-identifier>
<mifosx-external-identifier externalId="{{ record.transferExternalId }}"></mifosx-external-identifier>
</td>
<td class="field-name"> {{'labels.inputs.Effective From' | translate}} </td>
<td> {{ record.effectiveFrom | dateFormat }} </td>
<td class="field-name">{{ 'labels.inputs.Effective From' | translate }}</td>
<td>{{ record.effectiveFrom | dateFormat }}</td>
</tr>
</table>
</mat-panel-title>
</mat-expansion-panel-header>
<div class="external-asset-transfer">
@@ -83,65 +100,88 @@
<tbody>
<tr>
<td fxFlex="25%" class="m-l-5">
<b>{{'labels.inputs.Status' | translate}} :</b>
<b>{{ 'labels.inputs.Status' | translate }} :</b>
</td>
<td fxFlex="25%" class="m-l-5 left">
<div [ngClass]="itemStatus(record.status)">
<fa-icon icon="stop"></fa-icon>
<span class="m-l-5 status">{{record.status}}</span>
<span class="m-l-5 status">{{ record.status }}</span>
</div>
</td>
<td fxFlex="25%" class="m-l-5">
<b>{{'labels.inputs.Owner External Id' | translate}} :</b>
<b>{{ 'labels.inputs.Owner External Id' | translate }} :</b>
</td>
<td fxFlex="25%" class="m-l-5 left">
<mifosx-external-identifier externalId="{{record.owner.externalId}}" completed="true"></mifosx-external-identifier>
<mifosx-external-identifier
externalId="{{ record.owner.externalId }}"
completed="true"
></mifosx-external-identifier>
</td>
</tr>
<tr>
<td fxFlex="25%" class="m-l-5">
<b>{{'labels.inputs.Settlement Date' | translate}} :</b>
<b>{{ 'labels.inputs.Settlement Date' | translate }} :</b>
</td>
<td fxFlex="25%" class="m-l-5">
{{record.settlementDate | dateFormat}}
{{ record.settlementDate | dateFormat }}
</td>
<td fxFlex="25%" class="m-l-5">
<b>{{'labels.inputs.Effective Date' | translate}} :</b>
<b>{{ 'labels.inputs.Effective Date' | translate }} :</b>
</td>
<td fxFlex="25%" class="m-l-5">
{{record.effectiveFrom | dateFormat}}
{{ record.effectiveFrom | dateFormat }}
</td>
</tr>
<tr *ngIf="record.details">
<td fxFlex="25%" class="m-l-5">
<b>{{'labels.inputs.Details' | translate}} :</b>
<b>{{ 'labels.inputs.Details' | translate }} :</b>
</td>
<td fxFlex="75%" class="left">
<table>
<tbody>
<tr>
<td fxFlex="50%" class="m-l-5"><b>{{'labels.inputs.Principal Outstanding' | translate}} :</b></td>
<td fxFlex="50%" class="r-amount">{{record.details.totalPrincipalOutstanding | formatNumber}}</td>
<td fxFlex="50%" class="m-l-5">
<b>{{ 'labels.inputs.Principal Outstanding' | translate }} :</b>
</td>
<td fxFlex="50%" class="r-amount">
{{ record.details.totalPrincipalOutstanding | formatNumber }}
</td>
</tr>
<tr>
<td fxFlex="50%" class="m-l-5"><b>{{'labels.inputs.Interest Outstanding' | translate}} :</b></td>
<td fxFlex="50%" class="r-amount">{{record.details.totalInterestOutstanding | formatNumber}}</td>
<td fxFlex="50%" class="m-l-5">
<b>{{ 'labels.inputs.Interest Outstanding' | translate }} :</b>
</td>
<td fxFlex="50%" class="r-amount">
{{ record.details.totalInterestOutstanding | formatNumber }}
</td>
</tr>
<tr>
<td fxFlex="50%" class="m-l-5"><b>{{'labels.inputs.Fees Outstanding' | translate}} :</b></td>
<td fxFlex="50%" class="r-amount">{{record.details.totalFeeChargesOutstanding | formatNumber}}</td>
<td fxFlex="50%" class="m-l-5">
<b>{{ 'labels.inputs.Fees Outstanding' | translate }} :</b>
</td>
<td fxFlex="50%" class="r-amount">
{{ record.details.totalFeeChargesOutstanding | formatNumber }}
</td>
</tr>
<tr>
<td fxFlex="50%" class="m-l-5"><b>{{'labels.inputs.Penalties Outstanding' | translate}} :</b></td>
<td fxFlex="50%" class="r-amount">{{record.details.totalPenaltyChargesOutstanding | formatNumber}}</td>
<td fxFlex="50%" class="m-l-5">
<b>{{ 'labels.inputs.Penalties Outstanding' | translate }} :</b>
</td>
<td fxFlex="50%" class="r-amount">
{{ record.details.totalPenaltyChargesOutstanding | formatNumber }}
</td>
</tr>
<tr>
<td fxFlex="50%" class="m-l-5"><b>{{'labels.inputs.Outstanding' | translate}} :</b></td>
<td fxFlex="50%" class="r-amount">{{record.details.totalOutstanding | formatNumber}}</td>
<td fxFlex="50%" class="m-l-5">
<b>{{ 'labels.inputs.Outstanding' | translate }} :</b>
</td>
<td fxFlex="50%" class="r-amount">{{ record.details.totalOutstanding | formatNumber }}</td>
</tr>
<tr>
<td fxFlex="50%" class="m-l-5"><b>{{'labels.inputs.Overpaid' | translate}} :</b></td>
<td fxFlex="50%" class="r-amount">{{record.details.totalOverpaid | formatNumber}}</td>
<td fxFlex="50%" class="m-l-5">
<b>{{ 'labels.inputs.Overpaid' | translate }} :</b>
</td>
<td fxFlex="50%" class="r-amount">{{ record.details.totalOverpaid | formatNumber }}</td>
</tr>
</tbody>
</table>
@@ -154,23 +194,32 @@
<mat-divider [inset]="true"></mat-divider>
<div class="record-actions" fxLayout="row" fxLayoutAlign="flex-end" *ngIf="canBeCancelled(record)">
<button mat-button color="warn" (click)="cancelPendingSale(record)" matTooltip="{{'labels.text.Cancel Pending Sale' | translate}}">
<button
mat-button
color="warn"
(click)="cancelPendingSale(record)"
matTooltip="{{ 'labels.text.Cancel Pending Sale' | translate }}"
>
<fa-icon icon="trash"></fa-icon>
</button>
</div>
</mat-expansion-panel>
</mat-accordion>
<mat-paginator [pageSize]="pageSize" [pageSizeOptions]="[50, 100, 200]" [length]="totalRows" (page)="pageChanged($event)"
showFirstLastButtons *ngIf="existsDataToFilter"></mat-paginator>
<mat-paginator
[pageSize]="pageSize"
[pageSizeOptions]="[50, 100, 200]"
[length]="totalRows"
(page)="pageChanged($event)"
showFirstLastButtons
*ngIf="existsDataToFilter"
></mat-paginator>
</div>
<div class="alert" *ngIf="!existsDataToFilter">
<div class="message">
<i class="fa fa-exclamation-circle alert-check"></i>
{{'labels.text.No data found' | translate}}
{{ 'labels.text.No data found' | translate }}
</div>
</div>
</mat-card>
@@ -1,18 +1,14 @@
<div class="container">
<mat-card>
<div>
<form [formGroup]="provisioningCriteriaForm">
<div fxLayout="row" fxLayoutGap="2%">
<mat-form-field fxFlex>
<mat-label>{{ 'labels.inputs.Provisioning Criteria' | translate }}</mat-label>
<input required matInput formControlName="criteriaName">
<input required matInput formControlName="criteriaName" />
<mat-error *ngIf="provisioningCriteriaForm.controls.criteriaName.hasError('required')">
{{ 'labels.inputs.Provisioning Criteria' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Provisioning Criteria' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -24,72 +20,78 @@
</mat-option>
</mat-select>
</mat-form-field>
</div>
</form>
</div>
<div class="mat-elevation-z1">
<mat-hint *ngIf="!provisioningCriteriaFormValid">
{{ 'labels.text.Provisioning criteria definitions' | translate }}</mat-hint>
{{ 'labels.text.Provisioning criteria definitions' | translate }}</mat-hint
>
<table mat-table class="m-t-10" [dataSource]="definitions">
<ng-container matColumnDef="category">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Category' | translate }} </th>
<td mat-cell *matCellDef="let definition"> {{ definition.categoryName }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Category' | translate }}</th>
<td mat-cell *matCellDef="let definition">{{ definition.categoryName }}</td>
</ng-container>
<ng-container matColumnDef="minAge">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Min Age' | translate }} </th>
<td mat-cell *matCellDef="let definition"> {{ definition.minAge || '0' }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Min Age' | translate }}</th>
<td mat-cell *matCellDef="let definition">{{ definition.minAge || '0' }}</td>
</ng-container>
<ng-container matColumnDef="maxAge">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Max Age' | translate }} </th>
<td mat-cell *matCellDef="let definition"> {{ definition.maxAge || '0' }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Max Age' | translate }}</th>
<td mat-cell *matCellDef="let definition">{{ definition.maxAge || '0' }}</td>
</ng-container>
<ng-container matColumnDef="percentage">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Percentage' | translate }} (%)</th>
<td mat-cell *matCellDef="let definition"> {{ definition.provisioningPercentage || '0' }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Percentage' | translate }} (%)</th>
<td mat-cell *matCellDef="let definition">{{ definition.provisioningPercentage || '0' }}</td>
</ng-container>
<ng-container matColumnDef="liabilityAccount">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Liability Account' | translate }} </th>
<td mat-cell *matCellDef="let definition"> {{ (definition.liabilityAccount | find:loanProvisioningCriteriaTemplate.glAccounts:'id':'name') || '-' }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Liability Account' | translate }}</th>
<td mat-cell *matCellDef="let definition">
{{
(definition.liabilityAccount | find: loanProvisioningCriteriaTemplate.glAccounts : 'id' : 'name') || '-'
}}
</td>
</ng-container>
<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') || '-' }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Expense Account' | translate }}</th>
<td mat-cell *matCellDef="let definition">
{{ (definition.expenseAccount | find: loanProvisioningCriteriaTemplate.glAccounts : 'id' : 'name') || '-' }}
</td>
</ng-container>
<ng-container matColumnDef="edit">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Actions' | translate }} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Actions' | translate }}</th>
<td mat-cell *matCellDef="let definition">
<button mat-button color="primary" (click)="editDefinition(definition)">
<fa-icon icon="edit" class="m-r-10"></fa-icon>
{{'labels.buttons.Edit' | translate }}
{{ 'labels.buttons.Edit' | translate }}
</button>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
</table>
</div>
<div class="m-t-20" fxLayout="row" fxLayoutAlign="center" fxLayoutGap="20px">
<button type="button" mat-raised-button [routerLink]="['../']">{{'labels.buttons.Cancel' | translate }}</button>
<button mat-raised-button color="primary" [disabled]="!provisioningCriteriaFormValid" (click)="submit()" *mifosxHasPermission="'CREATE_PROVISIONING_CRITERIA'">{{'labels.buttons.Submit' | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../']">{{ 'labels.buttons.Cancel' | translate }}</button>
<button
mat-raised-button
color="primary"
[disabled]="!provisioningCriteriaFormValid"
(click)="submit()"
*mifosxHasPermission="'CREATE_PROVISIONING_CRITERIA'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</div>
</mat-card>
</div>
@@ -1,18 +1,14 @@
<div class="container">
<mat-card>
<div>
<form [formGroup]="provisioningCriteriaForm">
<div fxLayout="row" fxLayoutGap="2%">
<mat-form-field fxFlex>
<mat-label>{{ 'labels.inputs.Provisioning Criteria' | translate }}</mat-label>
<input required matInput formControlName="criteriaName">
<input required matInput formControlName="criteriaName" />
<mat-error *ngIf="provisioningCriteriaForm.controls.criteriaName.hasError('required')">
{{ 'labels.inputs.Provisioning Criteria' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Provisioning Criteria' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -24,71 +20,81 @@
</mat-option>
</mat-select>
</mat-form-field>
</div>
</form>
</div>
<div class="mat-elevation-z1">
<mat-hint *ngIf="!provisioningCriteriaFormValid">{{ 'labels.text.Provisioning criteria definitions' | translate }}</mat-hint>
<mat-hint *ngIf="!provisioningCriteriaFormValid">{{
'labels.text.Provisioning criteria definitions' | translate
}}</mat-hint>
<table mat-table class="m-t-10" [dataSource]="definitions">
<ng-container matColumnDef="category">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Category' | translate }} </th>
<td mat-cell *matCellDef="let definition"> {{ definition.categoryName }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Category' | translate }}</th>
<td mat-cell *matCellDef="let definition">{{ definition.categoryName }}</td>
</ng-container>
<ng-container matColumnDef="minAge">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Min Age' | translate }} </th>
<td mat-cell *matCellDef="let definition"> {{ definition.minAge || '0' }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Min Age' | translate }}</th>
<td mat-cell *matCellDef="let definition">{{ definition.minAge || '0' }}</td>
</ng-container>
<ng-container matColumnDef="maxAge">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Max Age' | translate }} </th>
<td mat-cell *matCellDef="let definition"> {{ definition.maxAge || '0' }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Max Age' | translate }}</th>
<td mat-cell *matCellDef="let definition">{{ definition.maxAge || '0' }}</td>
</ng-container>
<ng-container matColumnDef="percentage">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Percentage' | translate }} (%)</th>
<td mat-cell *matCellDef="let definition"> {{ definition.provisioningPercentage || '0' }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Percentage' | translate }} (%)</th>
<td mat-cell *matCellDef="let definition">{{ definition.provisioningPercentage || '0' }}</td>
</ng-container>
<ng-container matColumnDef="liabilityAccount">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Liability Account' | translate }} </th>
<td mat-cell *matCellDef="let definition"> {{ (definition.liabilityAccount | find:loanProvisioningCriteriaAndTemplate.glAccounts:'id':'name') || '-' }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Liability Account' | translate }}</th>
<td mat-cell *matCellDef="let definition">
{{
(definition.liabilityAccount | find: loanProvisioningCriteriaAndTemplate.glAccounts : 'id' : 'name') ||
'-'
}}
</td>
</ng-container>
<ng-container matColumnDef="expenseAccount">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Expense Account' | translate }} </th>
<td mat-cell *matCellDef="let definition"> {{ (definition.expenseAccount | find:loanProvisioningCriteriaAndTemplate.glAccounts:'id':'name') || '-' }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Expense Account' | translate }}</th>
<td mat-cell *matCellDef="let definition">
{{
(definition.expenseAccount | find: loanProvisioningCriteriaAndTemplate.glAccounts : 'id' : 'name') || '-'
}}
</td>
</ng-container>
<ng-container matColumnDef="edit">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Actions' | translate }} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Actions' | translate }}</th>
<td mat-cell *matCellDef="let definition">
<button mat-button color="primary" (click)="editDefinition(definition)">
<fa-icon icon="edit" class="m-r-10"></fa-icon>
{{'labels.buttons.Edit' | translate }}
{{ 'labels.buttons.Edit' | translate }}
</button>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
</table>
</div>
<div class="m-t-20" fxLayout="row" fxLayoutAlign="center" fxLayoutGap="20px">
<button type="button" mat-raised-button [routerLink]="['../']">{{'labels.buttons.Cancel' | translate }}</button>
<button mat-raised-button color="primary" [disabled]="!provisioningCriteriaFormValid" (click)="submit()" *mifosxHasPermission="'UPDATE_CRITERIA'">{{'labels.buttons.Submit' | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../']">{{ 'labels.buttons.Cancel' | translate }}</button>
<button
mat-raised-button
color="primary"
[disabled]="!provisioningCriteriaFormValid"
(click)="submit()"
*mifosxHasPermission="'UPDATE_CRITERIA'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</div>
</mat-card>
</div>
@@ -1,40 +1,44 @@
<div class="container m-b-20" fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px">
<button mat-raised-button color="primary" [routerLink]="['create']" *mifosxHasPermission="'CREATE_PROVISIONING_CRITERIA'">
<button
mat-raised-button
color="primary"
[routerLink]="['create']"
*mifosxHasPermission="'CREATE_PROVISIONING_CRITERIA'"
>
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{'labels.buttons.Create Provisioning Criteria' | translate }}
{{ 'labels.buttons.Create Provisioning Criteria' | translate }}
</button>
</div>
<div class="container">
<div fxLayout="row" fxLayoutGap="20px">
<mat-form-field fxFlex>
<mat-label>{{'labels.inputs.Filter' | translate}}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)">
<mat-label>{{ 'labels.inputs.Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
</div>
<div class="mat-elevation-z8">
<table mat-table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="criteriaName">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.name' | translate }} </th>
<td mat-cell *matCellDef="let loanProvisioningCriteria"> {{ loanProvisioningCriteria.criteriaName }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.name' | translate }}</th>
<td mat-cell *matCellDef="let loanProvisioningCriteria">{{ loanProvisioningCriteria.criteriaName }}</td>
</ng-container>
<ng-container matColumnDef="createdBy">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Created By' | translate }} </th>
<td mat-cell *matCellDef="let loanProvisioningCriteria"> {{ loanProvisioningCriteria.createdBy }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Created By' | translate }}</th>
<td mat-cell *matCellDef="let loanProvisioningCriteria">{{ loanProvisioningCriteria.createdBy }}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;" [routerLink]="[row.criteriaId]" class="select-row"></tr>
<tr
mat-row
*matRowDef="let row; columns: displayedColumns"
[routerLink]="[row.criteriaId]"
class="select-row"
></tr>
</table>
<mat-paginator [pageSizeOptions]="[10, 25, 50, 100]" showFirstLastButtons></mat-paginator>
</div>
</div>
@@ -1,74 +1,63 @@
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column" class="container m-b-20">
<button mat-raised-button color="primary" [routerLink]="['edit']" *mifosxHasPermission="'UPDATE_CRITERIA'">
<fa-icon icon="edit" class="m-r-10"></fa-icon>
{{'labels.buttons.Edit' | translate }}
{{ 'labels.buttons.Edit' | translate }}
</button>
<button mat-raised-button color="warn" (click)="deleteCriteria()" *mifosxHasPermission="'DELETE_CRITERIA'">
<fa-icon icon="trash" class="m-r-10"></fa-icon>
{{'labels.buttons.Delete' | translate }}
{{ 'labels.buttons.Delete' | translate }}
</button>
</div>
<div class="container">
<mat-card>
<mat-card-content>
<div fxLayout="row wrap" class="content">
<h2 class="mat-h2" fxFlexFill>{{provisioningData.criteriaName}}</h2>
<h2 class="mat-h2" fxFlexFill>{{ provisioningData.criteriaName }}</h2>
<mat-divider [inset]="true"></mat-divider>
<div fxFlexFill class="loanProduct">
<div fxFlexFill class="loanProduct">
<span fxFlex="40%">{{ 'labels.inputs.Loan Product' | translate }}:</span>
<span fxFlex="60%">{{ loanProducts }}</span>
</div>
</div>
<div>
<table mat-table class="mat-elevation-z1" [dataSource]="dataSource">
<ng-container matColumnDef="category">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Category' | translate }} </th>
<td mat-cell *matCellDef="let provisioningData"> {{provisioningData.categoryName}} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Category' | translate }}</th>
<td mat-cell *matCellDef="let provisioningData">{{ provisioningData.categoryName }}</td>
</ng-container>
<ng-container matColumnDef="minAge">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Min Age' | translate }} </th>
<td mat-cell *matCellDef="let provisioningData"> {{provisioningData.minAge}} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Min Age' | translate }}</th>
<td mat-cell *matCellDef="let provisioningData">{{ provisioningData.minAge }}</td>
</ng-container>
<ng-container matColumnDef="maxAge">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Max Age' | translate }} </th>
<td mat-cell *matCellDef="let provisioningData"> {{provisioningData.maxAge}} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Max Age' | translate }}</th>
<td mat-cell *matCellDef="let provisioningData">{{ provisioningData.maxAge }}</td>
</ng-container>
<ng-container matColumnDef="percentage">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Percentage' | translate }} </th>
<td mat-cell *matCellDef="let provisioningData"> {{provisioningData.provisioningPercentage}} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Percentage' | translate }}</th>
<td mat-cell *matCellDef="let provisioningData">{{ provisioningData.provisioningPercentage }}</td>
</ng-container>
<ng-container matColumnDef="liabilityAccount">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Liability Account' | translate }} </th>
<td mat-cell *matCellDef="let provisioningData"> {{provisioningData.liabilityName}} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Liability Account' | translate }}</th>
<td mat-cell *matCellDef="let provisioningData">{{ provisioningData.liabilityName }}</td>
</ng-container>
<ng-container matColumnDef="expenseAccount">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Expense Account' | translate }} </th>
<td mat-cell *matCellDef="let provisioningData"> {{provisioningData.expenseName}} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Expense Account' | translate }}</th>
<td mat-cell *matCellDef="let provisioningData">{{ provisioningData.expenseName }}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
</table>
</div>
</mat-card-content>
</mat-card>
</div>
@@ -1,37 +1,32 @@
<div class="container">
<mat-card>
<form [formGroup]="fundForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.name' | translate }}</mat-label>
<input matInput required autofocus formControlName="name">
<input matInput required autofocus formControlName="name" />
<mat-error *ngIf="fundForm.controls.name.hasError('required')">
{{ 'labels.inputs.name' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.name' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{ 'labels.inputs.External Id' | translate }}</mat-label>
<input matInput autofocus formControlName="externalId">
<input matInput autofocus formControlName="externalId" />
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../']">{{'labels.buttons.Cancel' | translate }}</button>
<button mat-raised-button color="primary" [disabled]="!fundForm.valid" *mifosxHasPermission="'CREATE_FUND'">{{'labels.buttons.Submit' | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button mat-raised-button color="primary" [disabled]="!fundForm.valid" *mifosxHasPermission="'CREATE_FUND'">
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</form>
</mat-card>
</div>
@@ -1,37 +1,32 @@
<div class="container">
<mat-card>
<form [formGroup]="fundForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.name' | translate }}</mat-label>
<input matInput required autofocus formControlName="name">
<input matInput required autofocus formControlName="name" />
<mat-error *ngIf="fundForm.controls.name.hasError('required')">
{{ 'labels.inputs.name' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.name' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{ 'labels.inputs.External Id' | translate }}</mat-label>
<input matInput autofocus formControlName="externalId">
<input matInput autofocus formControlName="externalId" />
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../']">{{'labels.buttons.Cancel' | translate }}</button>
<button mat-raised-button color="primary" [disabled]="!fundForm.valid" *mifosxHasPermission="'UPDATE_FUND'">{{'labels.buttons.Submit' | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button mat-raised-button color="primary" [disabled]="!fundForm.valid" *mifosxHasPermission="'UPDATE_FUND'">
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</form>
</mat-card>
</div>
@@ -2,55 +2,61 @@
<div #buttonCreateCharge class="in-block">
<button mat-raised-button color="primary" [routerLink]="['create']" *mifosxHasPermission="'CREATE_FUND'">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{'labels.buttons.Create Fund' | translate }}
{{ 'labels.buttons.Create Fund' | translate }}
</button>
</div>
</div>
<div class="container">
<div #filter fxLayout="row" fxLayoutGap="20px">
<mat-form-field fxFlex>
<mat-label>{{'labels.inputs.Filter' | translate}}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)">
<mat-label>{{ 'labels.inputs.Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
</div>
<div #chargesTable class="mat-elevation-z8 table-container">
<table mat-table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.name' | translate }} </th>
<td mat-cell *matCellDef="let charge"> {{ charge.name }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.name' | translate }}</th>
<td mat-cell *matCellDef="let charge">{{ charge.name }}</td>
</ng-container>
<ng-container matColumnDef="externalId">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.External Id' | translate }} </th>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.External Id' | translate }}</th>
<td mat-cell *matCellDef="let charge">
<mifosx-external-identifier externalId="{{charge.externalId}}"></mifosx-external-identifier>
<mifosx-external-identifier externalId="{{ charge.externalId }}"></mifosx-external-identifier>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;" [routerLink]="[row.id]" class="select-row"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns" [routerLink]="[row.id]" class="select-row"></tr>
</table>
<mat-paginator [pageSizeOptions]="[10, 25, 50, 100]" showFirstLastButtons></mat-paginator>
</div>
</div>
<ng-template #templateFundFormRef let-popover="popover">
<h2>{{ 'labels.heading.Manage Funds' | translate }}</h2>
<p class="mw300">{{ 'labels.text.Used Add Fund' | translate }}: <a href="https://mifosforge.jira.com/wiki/spaces/docs/pages/67141736/Manage+Funds" target="_blank">{{ 'labels.inputs.Manage Funds' | translate }}</a></p>
<p class="mw300">
{{ 'labels.text.Used Add Fund' | translate }}:
<a href="https://mifosforge.jira.com/wiki/spaces/docs/pages/67141736/Manage+Funds" target="_blank">{{
'labels.inputs.Manage Funds' | translate
}}</a>
</p>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn" (click)="popover.close();configurationWizardService.closeConfigWizard()">Close</button>
<button mat-raised-button color="primary" (click)="popover.close();">{{'labels.buttons.Add Funds' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();previousStep()">{{'labels.buttons.Back' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();nextStep()">{{'labels.buttons.Next' | translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
Close
</button>
<button mat-raised-button color="primary" (click)="popover.close()">
{{ 'labels.buttons.Add Funds' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); previousStep()">
{{ 'labels.buttons.Back' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); nextStep()">
{{ 'labels.buttons.Next' | translate }}
</button>
</div>
</ng-template>
@@ -1,20 +1,16 @@
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column" class="container m-b-20">
<button mat-raised-button color="primary" [routerLink]="['edit']" *mifosxHasPermission="'UPDATE_FUND'">
<fa-icon icon="edit" class="m-r-10"></fa-icon>
{{'labels.buttons.Edit' | translate }}
{{ 'labels.buttons.Edit' | translate }}
</button>
</div>
<div class="container">
<mat-card>
<mat-card-content>
<div fxLayout="row wrap" class="content">
<div fxFlex="50%" class="mat-body-strong">
{{ 'labels.inputs.name' | translate }}
{{ 'labels.inputs.name' | translate }}
</div>
<div fxFlex="50%">
@@ -26,16 +22,18 @@
</div>
<div fxFlex="50%">
<mifosx-external-identifier externalId="{{fundData.externalId}}" completed="true"></mifosx-external-identifier>
<mifosx-external-identifier
externalId="{{ fundData.externalId }}"
completed="true"
></mifosx-external-identifier>
</div>
</div>
<div fxLayout="row" fxLayoutAlign="center" fxLayoutGap="2%" fxLayout.lt-md="column">
<button type="button" mat-raised-button color="primary" [routerLink]="['../']">{{ 'labels.buttons.Back' | translate}}</button>
<button type="button" mat-raised-button color="primary" [routerLink]="['../']">
{{ 'labels.buttons.Back' | translate }}
</button>
</div>
</mat-card-content>
</mat-card>
</div>
@@ -1,70 +1,87 @@
<div class="container">
<mat-card>
<form [formGroup]="officeForm" (ngSubmit)="submit()">
<mat-card-content>
<div #createOfficeFormRef fxLayout="column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.Office' | translate }}</mat-label>
<input required matInput formControlName="name">
<input required matInput formControlName="name" />
<mat-error *ngIf="officeForm.controls.name.hasError('required')">
{{ 'labels.inputs.Office' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Office' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{ 'labels.inputs.Parent Office' | translate }}</mat-label>
<mat-select required formControlName="parentId">
<mat-option *ngFor="let office of officeData" [value]="office.id" >
<mat-option *ngFor="let office of officeData" [value]="office.id">
{{ office.name }}
</mat-option>
</mat-select>
<mat-error *ngIf="officeForm.controls.parentId.hasError('required')">
{{ 'labels.inputs.Parent Office' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Parent Office' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field (click)="openedOnDatePicker.open()">
<mat-label>{{ 'labels.inputs.Opened On' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" formControlName="openingDate" required [matDatepicker]="openedOnDatePicker">
<input
matInput
[min]="minDate"
[max]="maxDate"
formControlName="openingDate"
required
[matDatepicker]="openedOnDatePicker"
/>
<mat-datepicker-toggle matSuffix [for]="openedOnDatePicker"></mat-datepicker-toggle>
<mat-datepicker #openedOnDatePicker></mat-datepicker>
<mat-error *ngIf="officeForm.controls.openingDate.hasError('required')">
{{ 'labels.inputs.Opening Date' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Opening Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{ 'labels.inputs.External ID' | translate }}</mat-label>
<input matInput formControlName="externalId">
<input matInput formControlName="externalId" />
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../']">{{'labels.buttons.Cancel' | translate }}</button>
<button mat-raised-button color="primary" [disabled]="!officeForm.valid" *mifosxHasPermission="'CREATE_OFFICE'">{{'labels.buttons.Submit' | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button mat-raised-button color="primary" [disabled]="!officeForm.valid" *mifosxHasPermission="'CREATE_OFFICE'">
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</form>
</mat-card>
</div>
<ng-template #templateCreateOfficeForm let-popover="popover">
<h2>{{'labels.heading.Create Office' | translate }}</h2>
<p class="mw400">{{'labels.text.Filling Details' | translate }}: <a href="https://mifosforge.jira.com/wiki/spaces/docs/pages/67141727/Manage+Offices" target="_blank">{{ 'labels.inputs.Manage Offices' | translate }}</a></p>
<h2>{{ 'labels.heading.Create Office' | translate }}</h2>
<p class="mw400">
{{ 'labels.text.Filling Details' | translate }}:
<a href="https://mifosforge.jira.com/wiki/spaces/docs/pages/67141727/Manage+Offices" target="_blank">{{
'labels.inputs.Manage Offices' | translate
}}</a>
</p>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn" (click)="popover.close();configurationWizardService.closeConfigWizard()">{{'labels.buttons.Close' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close()">{{'labels.buttons.Create Office' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();previousStep()">{{'labels.buttons.Back' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();nextStep()">{{'labels.buttons.Next Step' | translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close()">
{{ 'labels.buttons.Create Office' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); previousStep()">
{{ 'labels.buttons.Back' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); nextStep()">
{{ 'labels.buttons.Next Step' | translate }}
</button>
</div>
</ng-template>
@@ -1,18 +1,14 @@
<div class="container">
<mat-card>
<form [formGroup]="officeForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.Office' | translate }}</mat-label>
<input matInput required formControlName="name">
<input matInput required formControlName="name" />
<mat-error *ngIf="officeForm.controls.name.hasError('required')">
{{ 'labels.inputs.Office' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Office' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -24,36 +20,44 @@
</mat-option>
</mat-select>
<mat-error *ngIf="officeForm.controls.parentId.hasError('required')">
{{ 'labels.inputs.Parent Office' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Parent Office' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field (click)="openingDatePicker.open()">
<mat-label>{{ 'labels.inputs.Opened On' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="openingDatePicker" required formControlName="openingDate">
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="openingDatePicker"
required
formControlName="openingDate"
/>
<mat-datepicker-toggle matSuffix [for]="openingDatePicker"></mat-datepicker-toggle>
<mat-datepicker #openingDatePicker></mat-datepicker>
<mat-error *ngIf="officeForm.controls.openingDate.hasError('required')">
{{ 'labels.inputs.Opening Date' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Opening Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{ 'labels.inputs.External ID' | translate }}</mat-label>
<input matInput formControlName="externalId">
<input matInput formControlName="externalId" />
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../general']">{{'labels.buttons.Cancel' | translate }}</button>
<button mat-raised-button color="primary" [disabled]="!officeForm.valid" *mifosxHasPermission="'UPDATE_OFFICE'">{{'labels.buttons.Submit' | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button mat-raised-button color="primary" [disabled]="!officeForm.valid" *mifosxHasPermission="'UPDATE_OFFICE'">
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</form>
</mat-card>
</div>
@@ -1,5 +1,4 @@
<div class="container m-b-20" fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px">
<mat-button-toggle-group [formControl]="viewGroup">
<mat-button-toggle value="listView">
<fa-icon icon="list"></fa-icon>
@@ -12,84 +11,80 @@
<div #buttonCreateOffice class="in-block">
<button mat-raised-button color="primary" [routerLink]="['create']" *mifosxHasPermission="'CREATE_OFFICE'">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{'labels.buttons.Create Office' | translate }}
{{ 'labels.buttons.Create Office' | translate }}
</button>
</div>
<div #buttonImportOffices class="in-block">
<button mat-raised-button color="primary" *mifosxHasPermission="'CREATE_OFFICE'"
[routerLink]="['/organization', 'bulk-import', 'Offices']">
<button
mat-raised-button
color="primary"
*mifosxHasPermission="'CREATE_OFFICE'"
[routerLink]="['/organization', 'bulk-import', 'Offices']"
>
<fa-icon icon="upload" class="m-r-10"></fa-icon>
{{'labels.buttons.Import Offices' | translate }}
{{ 'labels.buttons.Import Offices' | translate }}
</button>
</div>
</div>
<div class="container" [hidden]="viewGroup.value !== 'listView'">
<div fxLayout="row" fxLayoutGap="20px">
<mat-form-field fxFlex>
<mat-label>{{ 'Filter'| translate}}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)">
<mat-label>{{ 'Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
</div>
<!-- List View -->
<div class="mat-elevation-z8">
<table mat-table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{' Office Name '|translate}}</th>
<td mat-cell *matCellDef="let offices"> {{ offices.name }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ ' Office Name ' | translate }}</th>
<td mat-cell *matCellDef="let offices">{{ offices.name }}</td>
</ng-container>
<ng-container matColumnDef="externalId">
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{' External ID '|translate}}</th>
<td mat-cell *matCellDef="let offices"> {{ offices.externalId }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ ' External ID ' | translate }}</th>
<td mat-cell *matCellDef="let offices">{{ offices.externalId }}</td>
</ng-container>
<ng-container matColumnDef="parentName">
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{' Parent Office '|translate}}</th>
<td mat-cell *matCellDef="let offices"> {{ offices.parentName }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ ' Parent Office ' | translate }}</th>
<td mat-cell *matCellDef="let offices">{{ offices.parentName }}</td>
</ng-container>
<ng-container matColumnDef="openingDate">
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{' Opened On '|translate}}</th>
<td mat-cell *matCellDef="let offices"> {{ offices.openingDate | dateFormat }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ ' Opened On ' | translate }}</th>
<td mat-cell *matCellDef="let offices">{{ offices.openingDate | dateFormat }}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;" class="select-row"
[routerLink]="[row.id, 'general']"></tr>
<tr
mat-row
*matRowDef="let row; columns: displayedColumns"
class="select-row"
[routerLink]="[row.id, 'general']"
></tr>
</table>
<mat-paginator [pageSizeOptions]="[10, 25, 50, 100]" showFirstLastButtons></mat-paginator>
</div>
</div>
<!-- Tree View -->
<div class="container" [hidden]="viewGroup.value !== 'treeView'">
<div class="m-b-20" fxLayout="row" fxLayoutAlign="start" fxLayoutGap="20px">
<button mat-raised-button (click)="toggleExpandCollapse()">
{{ (isTreeExpanded ? "labels.buttons.Collapse All" : "labels.buttons.Expand All") | translate }}
{{ (isTreeExpanded ? 'labels.buttons.Collapse All' : 'labels.buttons.Expand All') | translate }}
</button>
</div>
<div fxLayout="row" fxLayoutGap="4%" fxLayout.lt-md="column">
<div fxFlex>
<mat-card>
<mat-card-content>
<mat-tree [dataSource]="nestedTreeDataSource" [treeControl]="nestedTreeControl" class="office-tree">
<mat-tree-node *matTreeNodeDef="let node" matTreeNodeToggle>
<li class="mat-tree-node">
<button mat-icon-button disabled></button>
@@ -103,8 +98,10 @@
<li>
<div class="mat-tree-node">
<button mat-icon-button matTreeNodeToggle [attr.aria-label]="'toggle ' + node.name">
<fa-icon class="mat-icon-rtl-mirror"
icon="{{ nestedTreeControl.isExpanded(node) ? 'chevron-down' : 'chevron-right' }}"></fa-icon>
<fa-icon
class="mat-icon-rtl-mirror"
icon="{{ nestedTreeControl.isExpanded(node) ? 'chevron-down' : 'chevron-right' }}"
></fa-icon>
</button>
<span (click)="viewOfficeNode(node)" class="m-r-10">
{{ node.name }}
@@ -115,23 +112,15 @@
</ul>
</li>
</mat-nested-tree-node>
</mat-tree>
</mat-card-content>
</mat-card>
</div>
<div fxFlex="48%" *ngIf="office">
<mat-card>
<mat-card-content>
<div fxLayout="row">
<mat-card-title>
{{ office.name }}
</mat-card-title>
@@ -141,17 +130,13 @@
<fa-icon icon="times"></fa-icon>
</button>
</div>
</div>
<mat-tab-group>
<mat-tab label="General">
<div fxLayout="row wrap" class="content">
<div fxFlex="50%" class="mat-body-strong" *ngIf="office.parentId">
{{'Parent Office'|translate}}
{{ 'Parent Office' | translate }}
</div>
<div fxFlex="50%" *ngIf="office.parentId">
@@ -159,7 +144,7 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{' Opened On'|translate}}
{{ ' Opened On' | translate }}
</div>
<div fxFlex="50%">
@@ -167,88 +152,129 @@
</div>
<div fxFlex="50%" class="mat-body-strong" *ngIf="office.externalId">
{{'External Id'|translate}}
{{ 'External Id' | translate }}
</div>
<div fxFlex="50%" *ngIf="office.externalId">
<mifosx-external-identifier externalId="{{office.externalId}}"></mifosx-external-identifier>
<mifosx-external-identifier externalId="{{ office.externalId }}"></mifosx-external-identifier>
</div>
</div>
</mat-tab>
<mat-tab *ngFor="let dataTable of dataTablesData" label="{{ dataTable.registeredTableName }}"></mat-tab>
</mat-tab-group>
</mat-card-content>
</mat-card>
</div>
</div>
</div>
<ng-template #templateButtonTreeView let-popover="popover">
<h2>{{'labels.heading.Tree View' | translate }}</h2>
<h2>{{ 'labels.heading.Tree View' | translate }}</h2>
<p class="mw300">{{ 'labels.text.Launch an alternative view for office hierarchy' | translate }}</p>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn"
(click)="popover.close();configurationWizardService.closeConfigWizard()">{{'labels.buttons.Close' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();previousStep();">{{'labels.buttons.Back' | translate }}</button>
<button mat-raised-button color="primary"
(click)="popover.close();showPopover(templateButtonCreateOffice,buttonCreateOffice,'bottom', true);">{{'labels.buttons.Next' | translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); previousStep()">
{{ 'labels.buttons.Back' | translate }}
</button>
<button
mat-raised-button
color="primary"
(click)="popover.close(); showPopover(templateButtonCreateOffice, buttonCreateOffice, 'bottom', true)"
>
{{ 'labels.buttons.Next' | translate }}
</button>
</div>
</ng-template>
<ng-template #templateButtonCreateOffice let-popover="popover">
<h2>{{'labels.heading.Create Office' | translate }}</h2>
<h2>{{ 'labels.heading.Create Office' | translate }}</h2>
<p class="mw300">{{ 'labels.text.Create new offices' | translate }}</p>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn"
(click)="popover.close();configurationWizardService.closeConfigWizard()">{{'labels.buttons.Close' | translate }}</button>
<button mat-raised-button color="primary"
(click)="popover.close();showPopover(templateButtonTreeView,buttonTreeView,'bottom', true);">{{'labels.buttons.Back' | translate }}</button>
<button mat-raised-button color="primary"
(click)="popover.close();showPopover(templateButtonImportOffices,buttonImportOffices,'bottom', true);">{{'labels.buttons.Next' | translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
<button
mat-raised-button
color="primary"
(click)="popover.close(); showPopover(templateButtonTreeView, buttonTreeView, 'bottom', true)"
>
{{ 'labels.buttons.Back' | translate }}
</button>
<button
mat-raised-button
color="primary"
(click)="popover.close(); showPopover(templateButtonImportOffices, buttonImportOffices, 'bottom', true)"
>
{{ 'labels.buttons.Next' | translate }}
</button>
</div>
</ng-template>
<ng-template #templateButtonImportOffices let-popover="popover">
<h2>{{'labels.heading.Import Offices' | translate }}</h2>
<h2>{{ 'labels.heading.Import Offices' | translate }}</h2>
<p class="mw300">{{ 'labels.text.Launch the Bulk import/Offices' | translate }}</p>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn"
(click)="popover.close();configurationWizardService.closeConfigWizard()">{{'labels.buttons.Close' | translate }}</button>
<button mat-raised-button color="primary"
(click)="popover.close();showPopover(templateButtonCreateOffice,buttonCreateOffice,'bottom', true);">{{'labels.buttons.Back' | translate }}</button>
<button mat-raised-button color="primary"
(click)="popover.close();showPopover(templateFilter,filter,'bottom', true);">{{'labels.buttons.Next' | translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
<button
mat-raised-button
color="primary"
(click)="popover.close(); showPopover(templateButtonCreateOffice, buttonCreateOffice, 'bottom', true)"
>
{{ 'labels.buttons.Back' | translate }}
</button>
<button
mat-raised-button
color="primary"
(click)="popover.close(); showPopover(templateFilter, filter, 'bottom', true)"
>
{{ 'labels.buttons.Next' | translate }}
</button>
</div>
</ng-template>
<ng-template #templateFilter let-popover="popover">
<h4>{{'labels.heading.Search bar to filter offices.' | translate }}</h4>
<h4>{{ 'labels.heading.Search bar to filter offices.' | translate }}</h4>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn"
(click)="popover.close();configurationWizardService.closeConfigWizard()">{{'labels.buttons.Close' | translate }}</button>
<button mat-raised-button color="primary"
(click)="popover.close();showPopover(templateButtonImportOffices,buttonImportOffices,'bottom', true);">{{'labels.buttons.Back' | translate }}</button>
<button mat-raised-button color="primary"
(click)="popover.close();showPopover(templateTableOffices,tableOffices,'top', true);">{{'labels.buttons.Next' | translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
<button
mat-raised-button
color="primary"
(click)="popover.close(); showPopover(templateButtonImportOffices, buttonImportOffices, 'bottom', true)"
>
{{ 'labels.buttons.Back' | translate }}
</button>
<button
mat-raised-button
color="primary"
(click)="popover.close(); showPopover(templateTableOffices, tableOffices, 'top', true)"
>
{{ 'labels.buttons.Next' | translate }}
</button>
</div>
</ng-template>
<ng-template #templateTableOffices let-popover="popover">
<h4>{{'labels.heading.List of offices in the organization.' | translate }}</h4>
<h4>{{ 'labels.heading.List of offices in the organization.' | translate }}</h4>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn"
(click)="popover.close();configurationWizardService.closeConfigWizard()">{{'labels.buttons.Close' | translate }}</button>
<button mat-raised-button color="primary"
(click)="popover.close();showPopover(templateFilter,filter,'bottom', true);">{{'labels.buttons.Back' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();nextStep()">{{'labels.buttons.Next' | translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
<button
mat-raised-button
color="primary"
(click)="popover.close(); showPopover(templateFilter, filter, 'bottom', true)"
>
{{ 'labels.buttons.Back' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); nextStep()">
{{ 'labels.buttons.Next' | translate }}
</button>
</div>
</ng-template>
@@ -1,15 +1,13 @@
<div class="tab-container mat-typography">
<div fxLayoutAlign="flex-end" class="action-button m-b-20">
<span *mifosxHasPermission="'UPDATE_OFFICE'">
<button mat-raised-button color="primary" [routerLink]="['../edit']">
<fa-icon icon="edit" class="m-r-10"></fa-icon>{{'labels.buttons.Edit' | translate }}
<fa-icon icon="edit" class="m-r-10"></fa-icon>{{ 'labels.buttons.Edit' | translate }}
</button>
</span>
</div>
<div fxLayout="row wrap" fxLayout.lt-md="column">
<div fxFlex="45%" class="mat-body-strong left">
{{ 'labels.inputs.Parent Office' | translate }}
</div>
@@ -35,11 +33,10 @@
{{ 'labels.inputs.External Id' | translate }}
</div>
<div fxFlex="50%" class="right" *ngIf="officeData.externalId">
<mifosx-external-identifier externalId="{{officeData.externalId}}"></mifosx-external-identifier>
<mifosx-external-identifier externalId="{{ officeData.externalId }}"></mifosx-external-identifier>
</div>
<div fxFlex="50%" class="right" *ngIf="!officeData.externalId">
{{ 'labels.inputs.Unassigned' | translate }}
</div>
</div>
</div>
@@ -1,27 +1,31 @@
<div class="container">
<mat-card class="office-card">
<mat-card-content>
<nav mat-tab-nav-bar class="navigation-tabs">
<a mat-tab-link [routerLink]="['./general']" routerLinkActive #general="routerLinkActive"
[active]="general.isActive">
{{ 'labels.inputs.General' | translate }}
<a
mat-tab-link
[routerLink]="['./general']"
routerLinkActive
#general="routerLinkActive"
[active]="general.isActive"
>
{{ 'labels.inputs.General' | translate }}
</a>
<span *ngFor="let officeDatatable of officeDatatables">
<a mat-tab-link *mifosxHasPermission="'READ_' + officeDatatable.registeredTableName"
[routerLink]="['./datatables',officeDatatable.registeredTableName]"
routerLinkActive #datatable="routerLinkActive" [active]="datatable.isActive">
{{officeDatatable.registeredTableName}}
<a
mat-tab-link
*mifosxHasPermission="'READ_' + officeDatatable.registeredTableName"
[routerLink]="['./datatables', officeDatatable.registeredTableName]"
routerLinkActive
#datatable="routerLinkActive"
[active]="datatable.isActive"
>
{{ officeDatatable.registeredTableName }}
</a>
</span>
</nav>
<router-outlet></router-outlet>
</mat-card-content>
</mat-card>
</div>
+171 -86
View File
@@ -1,13 +1,8 @@
<div class="container">
<mat-card>
<div fxLayout="row" fxLayout.lt-md="column" fxLayoutGap="20px">
<div fxFlex="50%">
<mat-nav-list>
<div #office>
<mat-list-item *mifosxHasPermission="'READ_OFFICE'">
<mat-icon matListIcon [routerLink]="['offices']">
@@ -16,7 +11,9 @@
<h4 matLine [routerLink]="['offices']">{{ 'labels.heading.Manage Offices' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(0)" *ngIf="!arrowBooleans[0]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(0)" *ngIf="arrowBooleans[0]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[0]" [routerLink]="['offices']">{{ 'labels.text.Add new office or modify or deactivate office' | translate }}</p>
<p matLine *ngIf="arrowBooleans[0]" [routerLink]="['offices']">
{{ 'labels.text.Add new office or modify or deactivate office' | translate }}
</p>
</mat-list-item>
</div>
@@ -28,7 +25,9 @@
<h4 matLine [routerLink]="['holidays']">{{ 'labels.heading.Manage Holidays' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(1)" *ngIf="!arrowBooleans[1]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(1)" *ngIf="arrowBooleans[1]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[1]" [routerLink]="['holidays']">{{ 'labels.text.Define holidays for office' | translate }}</p>
<p matLine *ngIf="arrowBooleans[1]" [routerLink]="['holidays']">
{{ 'labels.text.Define holidays for office' | translate }}
</p>
</mat-list-item>
</div>
@@ -40,20 +39,25 @@
<h4 matLine [routerLink]="['employees']">{{ 'labels.heading.Manage Employees' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(2)" *ngIf="!arrowBooleans[2]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(2)" *ngIf="arrowBooleans[2]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[2]" [routerLink]="['employees']">{{ 'labels.text.Employee represents loan officers' | translate }}</p>
<p matLine *ngIf="arrowBooleans[2]" [routerLink]="['employees']">
{{ 'labels.text.Employee represents loan officers' | translate }}
</p>
</mat-list-item>
</div>
<div #standinginstructions>
<mat-list-item
*mifosxHasPermission="'READ_STANDINGINSTRUCTION'">
<mat-list-item *mifosxHasPermission="'READ_STANDINGINSTRUCTION'">
<mat-icon matListIcon [routerLink]="['standing-instructions-history']">
<fa-icon icon="book" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['standing-instructions-history']">{{ 'labels.heading.Standing Instructions History' | translate }}</h4>
<h4 matLine [routerLink]="['standing-instructions-history']">
{{ 'labels.heading.Standing Instructions History' | translate }}
</h4>
<fa-icon (click)="arrowBooleansToggle(3)" *ngIf="!arrowBooleans[3]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(3)" *ngIf="arrowBooleans[3]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[3]" [routerLink]="['standing-instructions-history']">{{ 'labels.text.View logged history' | translate }}</p>
<p matLine *ngIf="arrowBooleans[3]" [routerLink]="['standing-instructions-history']">
{{ 'labels.text.View logged history' | translate }}
</p>
</mat-list-item>
</div>
@@ -65,7 +69,9 @@
<h4 matLine [routerLink]="['investors']">{{ 'labels.text.Investors' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(4)" *ngIf="!arrowBooleans[4]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(4)" *ngIf="arrowBooleans[4]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[4]" [routerLink]="['investors']">{{ 'labels.text.View the loan account details associated with the investors' | translate }}</p>
<p matLine *ngIf="arrowBooleans[4]" [routerLink]="['investors']">
{{ 'labels.text.View the loan account details associated with the investors' | translate }}
</p>
</mat-list-item>
</div>
@@ -77,20 +83,25 @@
<h4 matLine [routerLink]="['fund-mapping']">{{ 'labels.heading.Fund Mapping' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(5)" *ngIf="!arrowBooleans[5]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(5)" *ngIf="arrowBooleans[5]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[5]" [routerLink]="['fund-mapping']">{{ 'labels.text.Bulk entry screen for mapping' | translate }}</p>
<p matLine *ngIf="arrowBooleans[5]" [routerLink]="['fund-mapping']">
{{ 'labels.text.Bulk entry screen for mapping' | translate }}
</p>
</mat-list-item>
</div>
<div #passwordpreferences>
<mat-list-item
*mifosxHasPermission="'READ_PASSWORD_VALIDATION_POLICY'">
<mat-list-item *mifosxHasPermission="'READ_PASSWORD_VALIDATION_POLICY'">
<mat-icon matListIcon [routerLink]="['password-preferences']">
<fa-icon icon="lock" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['password-preferences']">{{ 'labels.heading.Password Preferences' | translate }}</h4>
<h4 matLine [routerLink]="['password-preferences']">
{{ 'labels.heading.Password Preferences' | translate }}
</h4>
<fa-icon (click)="arrowBooleansToggle(6)" *ngIf="!arrowBooleans[6]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(6)" *ngIf="arrowBooleans[6]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[6]" [routerLink]="['password-preferences']">{{ 'labels.text.The usage of stronger passwords' | translate }}</p>
<p matLine *ngIf="arrowBooleans[6]" [routerLink]="['password-preferences']">
{{ 'labels.text.The usage of stronger passwords' | translate }}
</p>
</mat-list-item>
</div>
@@ -99,34 +110,37 @@
<mat-icon matListIcon [routerLink]="['provisioning-criteria']">
<fa-icon icon="edit" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['provisioning-criteria']">{{ 'labels.heading.Loan Provisioning Criteria' | translate }}</h4>
<h4 matLine [routerLink]="['provisioning-criteria']">
{{ 'labels.heading.Loan Provisioning Criteria' | translate }}
</h4>
<fa-icon (click)="arrowBooleansToggle(7)" *ngIf="!arrowBooleans[7]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(7)" *ngIf="arrowBooleans[7]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[7]" [routerLink]="['provisioning-criteria']">{{ 'labels.text.Loan Provisioning Criteria Organization' | translate }}</p>
<p matLine *ngIf="arrowBooleans[7]" [routerLink]="['provisioning-criteria']">
{{ 'labels.text.Loan Provisioning Criteria Organization' | translate }}
</p>
</mat-list-item>
</div>
<div #entitydatatable>
<mat-list-item
*mifosxHasPermission="'READ_ENTITY_DATATABLE_CHECK'">
<mat-list-item *mifosxHasPermission="'READ_ENTITY_DATATABLE_CHECK'">
<mat-icon matListIcon [routerLink]="['entity-data-table-checks']">
<fa-icon icon="check" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['entity-data-table-checks']">{{ 'labels.heading.Entity Data Table Checks' | translate }}</h4>
<h4 matLine [routerLink]="['entity-data-table-checks']">
{{ 'labels.heading.Entity Data Table Checks' | translate }}
</h4>
<fa-icon (click)="arrowBooleansToggle(8)" *ngIf="!arrowBooleans[8]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(8)" *ngIf="arrowBooleans[8]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[8]" [routerLink]="['entity-data-table-checks']">{{ 'labels.text.Entity Data Table Checks Organization' | translate }}</p>
<p matLine *ngIf="arrowBooleans[8]" [routerLink]="['entity-data-table-checks']">
{{ 'labels.text.Entity Data Table Checks Organization' | translate }}
</p>
</mat-list-item>
</div>
</mat-nav-list>
</div>
<div fxFlex="50%">
<mat-nav-list>
<div #addEditCurrency>
<mat-list-item *mifosxHasPermission="'READ_CURRENCY'">
<mat-icon matListIcon [routerLink]="['currencies']">
@@ -135,7 +149,9 @@
<h4 matLine [routerLink]="['currencies']">{{ 'labels.heading.Currency Configuration' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(9)" *ngIf="!arrowBooleans[9]" icon="arrow-down" size="md"></fa-icon>
<fa-icon (click)="arrowBooleansToggle(9)" *ngIf="arrowBooleans[9]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[9]" [routerLink]="['currencies']">{{ 'labels.text.Currencies available across organization' | translate }}</p>
<p matLine *ngIf="arrowBooleans[9]" [routerLink]="['currencies']">
{{ 'labels.text.Currencies available across organization' | translate }}
</p>
</mat-list-item>
</div>
@@ -145,9 +161,16 @@
<fa-icon icon="money-bill-alt" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['manage-funds']">{{ 'labels.heading.Manage Funds' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(10)" *ngIf="!arrowBooleans[10]" icon="arrow-down" size="md"></fa-icon>
<fa-icon
(click)="arrowBooleansToggle(10)"
*ngIf="!arrowBooleans[10]"
icon="arrow-down"
size="md"
></fa-icon>
<fa-icon (click)="arrowBooleansToggle(10)" *ngIf="arrowBooleans[10]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[10]" [routerLink]="['manage-funds']">{{ 'labels.text.Funds are associated with loans' | translate }}</p>
<p matLine *ngIf="arrowBooleans[10]" [routerLink]="['manage-funds']">
{{ 'labels.text.Funds are associated with loans' | translate }}
</p>
</mat-list-item>
</div>
@@ -157,9 +180,16 @@
<fa-icon icon="money-bill-alt" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['bulkloan']">{{ 'labels.heading.Bulk Loan Reassignment' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(11)" *ngIf="!arrowBooleans[11]" icon="arrow-down" size="md"></fa-icon>
<fa-icon
(click)="arrowBooleansToggle(11)"
*ngIf="!arrowBooleans[11]"
icon="arrow-down"
size="md"
></fa-icon>
<fa-icon (click)="arrowBooleansToggle(11)" *ngIf="arrowBooleans[11]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[11]" [routerLink]="['bulkloan']">{{ 'labels.text.Easy way to reassign all the loan' | translate }}</p>
<p matLine *ngIf="arrowBooleans[11]" [routerLink]="['bulkloan']">
{{ 'labels.text.Easy way to reassign all the loan' | translate }}
</p>
</mat-list-item>
</div>
@@ -169,9 +199,16 @@
<fa-icon icon="money-bill-alt" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['tellers']">{{ 'labels.heading.Teller / Cashier Management' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(12)" *ngIf="!arrowBooleans[12]" icon="arrow-down" size="md"></fa-icon>
<fa-icon
(click)="arrowBooleansToggle(12)"
*ngIf="!arrowBooleans[12]"
icon="arrow-down"
size="md"
></fa-icon>
<fa-icon (click)="arrowBooleansToggle(12)" *ngIf="arrowBooleans[12]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[12]" [routerLink]="['tellers']">{{ 'labels.text.Manage Tellers / Cashiers' | translate }}</p>
<p matLine *ngIf="arrowBooleans[12]" [routerLink]="['tellers']">
{{ 'labels.text.Manage Tellers / Cashiers' | translate }}
</p>
</mat-list-item>
</div>
@@ -181,9 +218,16 @@
<fa-icon icon="calendar-alt" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['working-days']">{{ 'labels.heading.Working Days' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(13)" *ngIf="!arrowBooleans[13]" icon="arrow-down" size="md"></fa-icon>
<fa-icon
(click)="arrowBooleansToggle(13)"
*ngIf="!arrowBooleans[13]"
icon="arrow-down"
size="md"
></fa-icon>
<fa-icon (click)="arrowBooleansToggle(13)" *ngIf="arrowBooleans[13]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[13]" [routerLink]="['working-days']">{{ 'labels.text.Working days and configure behaviour of payments' | translate }}</p>
<p matLine *ngIf="arrowBooleans[13]" [routerLink]="['working-days']">
{{ 'labels.text.Working days and configure behaviour of payments' | translate }}
</p>
</mat-list-item>
</div>
@@ -193,9 +237,16 @@
<fa-icon icon="dollar-sign" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['payment-types']">{{ 'labels.heading.Payment Type' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(14)" *ngIf="!arrowBooleans[14]" icon="arrow-down" size="md"></fa-icon>
<fa-icon
(click)="arrowBooleansToggle(14)"
*ngIf="!arrowBooleans[14]"
icon="arrow-down"
size="md"
></fa-icon>
<fa-icon (click)="arrowBooleansToggle(14)" *ngIf="arrowBooleans[14]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[14]" [routerLink]="['payment-types']">{{ 'labels.text.Manage payment types' | translate }}</p>
<p matLine *ngIf="arrowBooleans[14]" [routerLink]="['payment-types']">
{{ 'labels.text.Manage payment types' | translate }}
</p>
</mat-list-item>
</div>
@@ -205,9 +256,16 @@
<fa-icon icon="envelope" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['sms-campaigns']">{{ 'labels.heading.SMS Campaigns' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(15)" *ngIf="!arrowBooleans[15]" icon="arrow-down" size="md"></fa-icon>
<fa-icon
(click)="arrowBooleansToggle(15)"
*ngIf="!arrowBooleans[15]"
icon="arrow-down"
size="md"
></fa-icon>
<fa-icon (click)="arrowBooleansToggle(15)" *ngIf="arrowBooleans[15]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[15]" [routerLink]="['sms-campaigns']">{{ 'labels.text.Define SMS Campaigns for Organization' | translate }}</p>
<p matLine *ngIf="arrowBooleans[15]" [routerLink]="['sms-campaigns']">
{{ 'labels.text.Define SMS Campaigns for Organization' | translate }}
</p>
</mat-list-item>
</div>
@@ -217,9 +275,16 @@
<fa-icon icon="chevron-right" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['adhoc-query']">{{ 'labels.heading.AdHocQuery' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(16)" *ngIf="!arrowBooleans[16]" icon="arrow-down" size="md"></fa-icon>
<fa-icon
(click)="arrowBooleansToggle(16)"
*ngIf="!arrowBooleans[16]"
icon="arrow-down"
size="md"
></fa-icon>
<fa-icon (click)="arrowBooleansToggle(16)" *ngIf="arrowBooleans[16]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[16]" [routerLink]="['adhoc-query']">{{ 'labels.text.Define AdHocQuery for Organization' | translate }}</p>
<p matLine *ngIf="arrowBooleans[16]" [routerLink]="['adhoc-query']">
{{ 'labels.text.Define AdHocQuery for Organization' | translate }}
</p>
</mat-list-item>
</div>
@@ -229,32 +294,37 @@
<fa-icon icon="upload" size="sm"></fa-icon>
</mat-icon>
<h4 matLine [routerLink]="['bulk-import']">{{ 'labels.heading.Bulk Import' | translate }}</h4>
<fa-icon (click)="arrowBooleansToggle(17)" *ngIf="!arrowBooleans[17]" icon="arrow-down" size="md"></fa-icon>
<fa-icon
(click)="arrowBooleansToggle(17)"
*ngIf="!arrowBooleans[17]"
icon="arrow-down"
size="md"
></fa-icon>
<fa-icon (click)="arrowBooleansToggle(17)" *ngIf="arrowBooleans[17]" icon="arrow-up" size="md"></fa-icon>
<p matLine *ngIf="arrowBooleans[17]" [routerLink]="['bulk-import']">{{ 'labels.text.Bulk data import using excel spreadsheet templates' | translate }}</p>
<p matLine *ngIf="arrowBooleans[17]" [routerLink]="['bulk-import']">
{{ 'labels.text.Bulk data import using excel spreadsheet templates' | translate }}
</p>
</mat-list-item>
</div>
</mat-nav-list>
</div>
</div>
</mat-card>
</div>
<ng-template #templateOffice let-popover="popover">
<h2>{{ 'labels.heading.Manage Offices' | translate }}</h2>
<p class="mw300">{{ 'labels.text.Manage Offices page allows you to create, edit' | translate }}</p>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn" (click)="popover.close();configurationWizardService.closeConfigWizard()">{{
'labels.buttons.Close' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();previousStepOffice()">{{ 'labels.buttons.Back' |
translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();nextStepOffice()">{{ 'labels.buttons.Next' |
translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); previousStepOffice()">
{{ 'labels.buttons.Back' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); nextStepOffice()">
{{ 'labels.buttons.Next' | translate }}
</button>
</div>
</ng-template>
@@ -262,12 +332,15 @@
<h2>{{ 'labels.heading.Currency Configuration' | translate }}</h2>
<p class="mw300">{{ 'labels.text.Define what currencies interactions within the Mifos X system' | translate }}</p>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn" (click)="popover.close();configurationWizardService.closeConfigWizard()">{{
'labels.buttons.Close' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();previousStepAddEditCurrency()">{{
'labels.buttons.Back' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();nextStepAddEditCurrency()">{{
'labels.buttons.Next' | translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); previousStepAddEditCurrency()">
{{ 'labels.buttons.Back' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); nextStepAddEditCurrency()">
{{ 'labels.buttons.Next' | translate }}
</button>
</div>
</ng-template>
@@ -275,12 +348,15 @@
<h2>{{ 'labels.heading.Manage Holidays' | translate }}</h2>
<p class="mw300">{{ 'labels.text.Ability to manage holidays for individual offices' | translate }}</p>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn" (click)="popover.close();configurationWizardService.closeConfigWizard()">{{
'labels.buttons.Close' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();previousStepHolidays()">{{ 'labels.buttons.Back'
| translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();nextStepHolidays()">{{ 'labels.buttons.Next' |
translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); previousStepHolidays()">
{{ 'labels.buttons.Back' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); nextStepHolidays()">
{{ 'labels.buttons.Next' | translate }}
</button>
</div>
</ng-template>
@@ -288,12 +364,15 @@
<h2>{{ 'labels.heading.Manage Employees' | translate }}</h2>
<p class="mw300">{{ 'labels.text.View, edit and/or delete your organization's employees' | translate }}</p>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn" (click)="popover.close();configurationWizardService.closeConfigWizard()">{{
'labels.buttons.Close' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();previousStepEmployee()">{{ 'labels.buttons.Back'
| translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();nextStepEmployee()">{{ 'labels.buttons.Next' |
translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); previousStepEmployee()">
{{ 'labels.buttons.Back' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); nextStepEmployee()">
{{ 'labels.buttons.Next' | translate }}
</button>
</div>
</ng-template>
@@ -301,12 +380,15 @@
<h2>{{ 'labels.heading.Working Days' | translate }}</h2>
<p class="mw300">{{ 'labels.text.Working days page allows you to define which days' | translate }}</p>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn" (click)="popover.close();configurationWizardService.closeConfigWizard()">{{
'labels.buttons.Close' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();previousStepWorkingDays()">{{
'labels.buttons.Back' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();nextStepWorkingDays()">{{ 'labels.buttons.Next' |
translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); previousStepWorkingDays()">
{{ 'labels.buttons.Back' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); nextStepWorkingDays()">
{{ 'labels.buttons.Next' | translate }}
</button>
</div>
</ng-template>
@@ -314,11 +396,14 @@
<h2>{{ 'labels.heading.Manage Funds' | translate }}</h2>
<p class="mw300">{{ 'labels.text.This allows you to manage funds associated with loans.' | translate }}</p>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn" (click)="popover.close();configurationWizardService.closeConfigWizard()">{{
'labels.buttons.Close' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();previousStepManageFunds()">{{
'labels.buttons.Back' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();nextStepManageFunds()">{{ 'labels.buttons.Next' |
translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); previousStepManageFunds()">
{{ 'labels.buttons.Back' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); nextStepManageFunds()">
{{ 'labels.buttons.Next' | translate }}
</button>
</div>
</ng-template>
@@ -1,26 +1,27 @@
<div class="container">
<mat-card>
<form [formGroup]="passwordPreferencesForm" (ngSubmit)="submit()">
<mat-card-content>
<mat-radio-group fxLayout="column" formControlName="validationPolicyId" fxLayoutGap="10px">
<mat-radio-button *ngFor="let passwordPreference of passwordPreferencesData" [value]="passwordPreference.id">
<span class="description-wrap">{{ passwordPreference.description }}</span>
</mat-radio-button>
</mat-radio-group>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../']">{{'labels.buttons.Cancel' | translate }}</button>
<button mat-raised-button color="primary" [disabled]="passwordPreferencesForm.pristine" *mifosxHasPermission="'UPDATE_PASSWORD_VALIDATION_POLICY'">{{'labels.buttons.Submit' | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="passwordPreferencesForm.pristine"
*mifosxHasPermission="'UPDATE_PASSWORD_VALIDATION_POLICY'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</form>
</mat-card>
</div>
@@ -1,18 +1,14 @@
<div class="container">
<mat-card>
<form [formGroup]="paymentTypeForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.Payment Type' | translate }}</mat-label>
<input required matInput formControlName="name">
<input required matInput formControlName="name" />
<mat-error *ngIf="paymentTypeForm.controls.name.hasError('required')">
{{ 'labels.inputs.Payment Type' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Payment Type' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -27,23 +23,28 @@
<mat-form-field>
<mat-label>{{ 'labels.inputs.Position' | translate }}</mat-label>
<input required matInput formControlName="position">
<input required matInput formControlName="position" />
<mat-error *ngIf="paymentTypeForm.controls.position.hasError('required')">
{{ 'labels.inputs.Position' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Position' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../']">{{'labels.buttons.Cancel' | translate }}</button>
<button mat-raised-button color="primary" [disabled]="!paymentTypeForm.valid" *mifosxHasPermission="'CREATE_PAYMENTTYPE'">{{'labels.buttons.Submit' | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!paymentTypeForm.valid"
*mifosxHasPermission="'CREATE_PAYMENTTYPE'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</form>
</mat-card>
</div>
@@ -1,18 +1,14 @@
<div class="container">
<mat-card>
<form [formGroup]="paymentTypeForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.Payment Type' | translate }}</mat-label>
<input required matInput formControlName="name">
<input required matInput formControlName="name" />
<mat-error *ngIf="paymentTypeForm.controls.name.hasError('required')">
{{ 'labels.inputs.Payment Type' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Payment Type' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -27,23 +23,28 @@
<mat-form-field>
<mat-label>{{ 'labels.inputs.Position' | translate }}</mat-label>
<input required matInput formControlName="position">
<input required matInput formControlName="position" />
<mat-error *ngIf="paymentTypeForm.controls.position.hasError('required')">
{{ 'labels.inputs.Position' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Position' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../']">{{'labels.buttons.Cancel' | translate }}</button>
<button mat-raised-button color="primary" [disabled]="!paymentTypeForm.valid" *mifosxHasPermission="'UPDATE_PAYMENTTYPE'">{{'labels.buttons.Submit' | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!paymentTypeForm.valid"
*mifosxHasPermission="'UPDATE_PAYMENTTYPE'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</form>
</mat-card>
</div>
@@ -1,84 +1,110 @@
<div class="container m-b-20" fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px">
<button mat-raised-button color="primary" [routerLink]="['create']" *mifosxHasPermission="'CREATE_PAYMENTTYPE'">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{'labels.buttons.Create Payment Type' | translate }}
{{ 'labels.buttons.Create Payment Type' | translate }}
</button>
</div>
<div class="container">
<div fxLayout="row" fxLayoutGap="20px">
<mat-form-field fxFlex>
<mat-label>{{'labels.inputs.Filter' | translate}}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)">
<mat-label>{{ 'labels.inputs.Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
</div>
<div class="mat-elevation-z8 table-container">
<table mat-table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.name' | translate }} </th>
<td mat-cell *matCellDef="let paymentType"> {{ paymentType.name }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.name' | translate }}</th>
<td mat-cell *matCellDef="let paymentType">{{ paymentType.name }}</td>
</ng-container>
<ng-container matColumnDef="description">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Description' | translate }} </th>
<td mat-cell *matCellDef="let paymentType"> {{ paymentType.description }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Description' | translate }}</th>
<td mat-cell *matCellDef="let paymentType">{{ paymentType.description }}</td>
</ng-container>
<ng-container matColumnDef="codeName">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Code' | translate }} </th>
<td mat-cell *matCellDef="let paymentType"> {{ paymentType.codeName }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Code' | translate }}</th>
<td mat-cell *matCellDef="let paymentType">{{ paymentType.codeName }}</td>
</ng-container>
<ng-container matColumnDef="isSystemDefined">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.System Defined' | translate }} </th>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.System Defined' | translate }}</th>
<td mat-cell *matCellDef="let paymentType">
<div [className]="paymentType.isSystemDefined === true ? 'true text-center' : 'false text-center'">
<fa-icon *ngIf="paymentType.isSystemDefined" icon="check-circle" size="lg" matTooltip="{{ 'tooltips.Yes' | translate }}" matTooltipPosition="right"></fa-icon>
<fa-icon *ngIf="!paymentType.isSystemDefined" icon="times-circle" size="lg" matTooltip="{{ 'tooltips.No' | translate }}" matTooltipPosition="right"></fa-icon>
<fa-icon
*ngIf="paymentType.isSystemDefined"
icon="check-circle"
size="lg"
matTooltip="{{ 'tooltips.Yes' | translate }}"
matTooltipPosition="right"
></fa-icon>
<fa-icon
*ngIf="!paymentType.isSystemDefined"
icon="times-circle"
size="lg"
matTooltip="{{ 'tooltips.No' | translate }}"
matTooltipPosition="right"
></fa-icon>
</div>
</td>
</ng-container>
<ng-container matColumnDef="isCashPayment">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Cash Payment' | translate }} </th>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Cash Payment' | translate }}</th>
<td mat-cell *matCellDef="let paymentType">
<div [className]="paymentType.isCashPayment === true ? 'true text-center' : 'false text-center'">
<fa-icon *ngIf="paymentType.isCashPayment" icon="check-circle" size="lg" matTooltip="{{ 'tooltips.Yes' | translate }}" matTooltipPosition="right"></fa-icon>
<fa-icon *ngIf="!paymentType.isCashPayment" icon="times-circle" size="lg" matTooltip="{{ 'tooltips.No' | translate }}" matTooltipPosition="right"></fa-icon>
<fa-icon
*ngIf="paymentType.isCashPayment"
icon="check-circle"
size="lg"
matTooltip="{{ 'tooltips.Yes' | translate }}"
matTooltipPosition="right"
></fa-icon>
<fa-icon
*ngIf="!paymentType.isCashPayment"
icon="times-circle"
size="lg"
matTooltip="{{ 'tooltips.No' | translate }}"
matTooltipPosition="right"
></fa-icon>
</div>
</td>
</ng-container>
<ng-container matColumnDef="position">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Position' | translate }} </th>
<td mat-cell *matCellDef="let paymentType" class="text-center"> {{ paymentType.position }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Position' | translate }}</th>
<td mat-cell *matCellDef="let paymentType" class="text-center">{{ paymentType.position }}</td>
</ng-container>
<ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Actions' | translate }} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Actions' | translate }}</th>
<td mat-cell *matCellDef="let paymentType">
<button mat-button [routerLink]="[paymentType.id, 'edit']" color="primary" *ngIf="!paymentType.isSystemDefined">
<fa-icon icon="edit" class="m-r-10"></fa-icon>{{'labels.buttons.Edit' | translate }}
<button
mat-button
[routerLink]="[paymentType.id, 'edit']"
color="primary"
*ngIf="!paymentType.isSystemDefined"
>
<fa-icon icon="edit" class="m-r-10"></fa-icon>{{ 'labels.buttons.Edit' | translate }}
</button>
<button mat-button (click)="deletePaymentType(paymentType.id)" color="warn" *ngIf="!paymentType.isSystemDefined">
<fa-icon icon="trash" class="m-r-10"></fa-icon>{{'labels.buttons.Delete' | translate }}
<button
mat-button
(click)="deletePaymentType(paymentType.id)"
color="warn"
*ngIf="!paymentType.isSystemDefined"
>
<fa-icon icon="trash" class="m-r-10"></fa-icon>{{ 'labels.buttons.Delete' | translate }}
</button>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
</table>
<mat-paginator [pageSizeOptions]="[10, 25, 50, 100]" showFirstLastButtons></mat-paginator>
</div>
</div>
@@ -1,7 +1,5 @@
<div class="container">
<mat-horizontal-stepper class="mat-elevation-z8" labelPosition="bottom" #smsCampaignStepper>
<ng-template matStepperIcon="number">
<fa-icon icon="pencil-alt" size="sm"></fa-icon>
</ng-template>
@@ -23,19 +21,16 @@
</ng-template>
<mat-step [stepControl]="smsCampaignForm">
<ng-template matStepLabel>{{ 'labels.inputs.CAMPAIGN' | translate }}</ng-template>
<mifosx-sms-campaign-step
<mifosx-sms-campaign-step
[smsCampaignTemplate]="smsCampaignTemplate"
(templateParameters)="setParameters($event)"
>
</mifosx-sms-campaign-step>
</mat-step>
<mat-step>
<ng-template matStepLabel>{{ 'labels.inputs.MESSAGE' | translate }}</ng-template>
<mifosx-campaign-message-step
@@ -43,21 +38,17 @@
[smsCampaignFormValid]="smsCampaignForm.valid"
>
</mifosx-campaign-message-step>
</mat-step>
<mat-step state="preview" *ngIf="smsCampaignForm.valid" completed>
<ng-template matStepLabel>{{ 'labels.inputs.PREVIEW' | translate }}</ng-template>
<mifosx-campaign-preview-step
<mifosx-campaign-preview-step
[smsCampaignTemplate]="smsCampaignTemplate"
[campaign]="smsCampaign" (submitEvent)="submit()"
[campaign]="smsCampaign"
(submitEvent)="submit()"
>
</mifosx-campaign-preview-step>
</mat-step>
</mat-horizontal-stepper>
</div>
@@ -1,7 +1,5 @@
<div class="container">
<mat-horizontal-stepper class="mat-elevation-z8" labelPosition="bottom" #smsCampaignStepper>
<ng-template matStepperIcon="number">
<fa-icon icon="pencil-alt" size="sm"></fa-icon>
</ng-template>
@@ -23,43 +21,36 @@
</ng-template>
<mat-step completed>
<ng-template matStepLabel>{{ 'labels.inputs.CAMPAIGN' | translate }}</ng-template>
<mifosx-edit-sms-campaign-step
<mifosx-edit-sms-campaign-step
[smsCampaign]="smsCampaign"
[smsCampaignTemplate]="smsCampaignTemplate"
(templateParameters)="setParameters($event)"
>
</mifosx-edit-sms-campaign-step>
</mat-step>
<mat-step>
<ng-template matStepLabel>{{ 'labels.inputs.MESSAGE' | translate }}</ng-template>
<mifosx-campaign-message-step
<mifosx-campaign-message-step
[templateParameters]="templateParameters"
[editCampaignMessage]="smsCampaign.campaignMessage"
>
</mifosx-campaign-message-step>
</mat-step>
<mat-step state="preview" completed>
<ng-template matStepLabel>{{ 'labels.inputs.PREVIEW' | translate }}</ng-template>
<mifosx-campaign-preview-step
[campaign]="smsCampaign"
[editedCampaignMessage]="campaignMessage"
[smsCampaignTemplate]="smsCampaignTemplate" (submitEvent)="submit()"
[smsCampaignTemplate]="smsCampaignTemplate"
(submitEvent)="submit()"
>
</mifosx-campaign-preview-step>
</mat-step>
</mat-horizontal-stepper>
</div>
@@ -1,15 +1,19 @@
<div fxLayout="column">
<mat-form-field fxFlex="98%">
<mat-label>{{'labels.inputs.Campaign Message' | translate }}</mat-label>
<mat-label>{{ 'labels.inputs.Campaign Message' | translate }}</mat-label>
<textarea matInput [formControl]="message"></textarea>
</mat-form-field>
<h3 fxFlex="98%" class="mat-h3">{{'labels.heading.Template Parameters' | translate }}</h3>
<h3 fxFlex="98%" class="mat-h3">{{ 'labels.heading.Template Parameters' | translate }}</h3>
<div fxLayout="row wrap" fxLayout.xs="column" fxLayoutAlign="center">
<button mat-stroked-button color="primary" class="parameter"
*ngFor="let label of parameterLabels" (click)="addText(label)">
<button
mat-stroked-button
color="primary"
class="parameter"
*ngFor="let label of parameterLabels"
(click)="addText(label)"
>
{{ label }}
</button>
</div>
@@ -17,12 +21,11 @@
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<button mat-raised-button matStepperPrevious>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{'labels.buttons.Previous' | translate }}
{{ 'labels.buttons.Previous' | translate }}
</button>
<button mat-raised-button matStepperNext [disabled]="!smsCampaignFormValid">
{{'labels.buttons.Next' | translate }}
{{ 'labels.buttons.Next' | translate }}
<fa-icon icon="arrow-right" class="m-l-10"></fa-icon>
</button>
</div>
</div>
@@ -1,37 +1,34 @@
<div class="tab-content mat-typography">
<mat-list>
<mat-list-item> {{ 'labels.inputs.Campaign Name' | translate }} : {{ campaign.campaignName }} </mat-list-item>
<mat-list-item>
{{ 'labels.inputs.Campaign Name' | translate }} : {{ campaign.campaignName }}
{{ 'labels.inputs.SMS Provider' | translate }} :
{{ (campaign.providerId | find: smsProviders : 'id' : 'name') || 'Unassigned' }}
</mat-list-item>
<mat-list-item>
{{ 'labels.inputs.SMS Provider' | translate }} : {{ (campaign.providerId | find:smsProviders:'id':'name') || "Unassigned" }}
{{ 'labels.inputs.Trigger Type' | translate }} :
{{ (campaign.editFlag ? campaign.triggerType.id : campaign.triggerType) | find: triggerTypes : 'id' : 'value' }}
</mat-list-item>
<mat-list-item>
{{ 'labels.inputs.Trigger Type' | translate }} : {{ (campaign.editFlag ? campaign.triggerType.id : campaign.triggerType) | find:triggerTypes:'id':'value' }}
</mat-list-item>
<mat-list-item>
{{ 'labels.inputs.Bussiness Rule' | translate }} : {{ campaign.editFlag ? campaign.reportName : campaign.paramValue?.reportName }}
{{ 'labels.inputs.Bussiness Rule' | translate }} :
{{ campaign.editFlag ? campaign.reportName : campaign.paramValue?.reportName }}
</mat-list-item>
<div fxLayout="column" fxLayoutGap="10px" class="template-message">
<h3>{{ 'labels.heading.Campaign Message' | translate }} :</h3>
<textarea matInput disabled>{{ campaign.editFlag ? editedCampaignMessage : campaign.message }}</textarea>
</div>
</mat-list>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<button mat-raised-button [routerLink]="['../']">
{{'labels.buttons.Cancel' | translate }}
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button mat-raised-button color="primary" (click)="submitEvent.emit()">
{{'labels.buttons.Submit' | translate }}
{{ 'labels.buttons.Submit' | translate }}
</button>
</div>
</div>
@@ -1,65 +1,64 @@
<div fxLayout="column">
<mat-divider fxFlex="98%"></mat-divider>
<h3 fxFlex="98%" class="mat-h3">{{'labels.heading.Business Rule Parameters' | translate }}</h3>
<h3 fxFlex="98%" class="mat-h3">{{ 'labels.heading.Business Rule Parameters' | translate }}</h3>
<form [formGroup]="ReportForm">
<div fxLayout="row wrap" fxLayoutGap="2%">
<ng-container *ngFor="let param of paramData" [ngSwitch]="param.displayType">
<ng-container *ngFor="let param of paramData" [ngSwitch]="param.displayType">
<ng-container *ngIf="ReportForm.controls[param.name]">
<mat-form-field fxFlex="48%" *ngSwitchCase="'text'">
<mat-label>{{param.label}}</mat-label>
<input matInput required [formControlName]="param.name">
<mat-label>{{ param.label }}</mat-label>
<input matInput required [formControlName]="param.name" />
<mat-error *ngIf="ReportForm.controls[param.name].hasError('required')">
{{param.label}} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ param.label }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%" *ngSwitchCase="'date'" (click)="runReportDatePicker.open()">
<mat-label>{{param.label}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="runReportDatePicker" required
[formControlName]="param.name">
<mat-label>{{ param.label }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="runReportDatePicker"
required
[formControlName]="param.name"
/>
<mat-datepicker-toggle matSuffix [for]="runReportDatePicker"></mat-datepicker-toggle>
<mat-datepicker #runReportDatePicker></mat-datepicker>
<mat-error *ngIf="ReportForm.controls[param.name].hasError('required')">
{{param.label}} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ param.label }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%" *ngSwitchCase="'select'">
<mat-label>{{param.label}}</mat-label>
<mat-label>{{ param.label }}</mat-label>
<mat-select required [formControlName]="param.name" [compareWith]="compareOptions">
<mat-option *ngFor="let option of param.selectOptions" [value]="option">
{{option.name}}
{{ option.name }}
</mat-option>
</mat-select>
<mat-error *ngIf="ReportForm.controls[param.name].hasError('required')">
{{param.label}} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ param.label }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
</ng-container>
</ng-container>
</div>
</form>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<button mat-raised-button matStepperPrevious disabled>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{'labels.buttons.Previous' | translate }}
{{ 'labels.buttons.Previous' | translate }}
</button>
<button mat-raised-button matStepperNext>
{{'labels.buttons.Next' | translate }}
{{ 'labels.buttons.Next' | translate }}
<fa-icon icon="arrow-right" class="m-l-10"></fa-icon>
</button>
</div>
@@ -1,12 +1,11 @@
<form [formGroup]="smsCampaignDetailsForm">
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column" fxLayoutAlign.gt-sm="start center">
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Campaign Name' | translate }}</mat-label>
<input matInput formControlName="campaignName" required>
<input matInput formControlName="campaignName" required />
<mat-error>
{{ 'labels.inputs.Campaign Name' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Campaign Name' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -27,7 +26,8 @@
</mat-option>
</mat-select>
<mat-error>
{{ 'labels.inputs.Trigger Type' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Trigger Type' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -35,14 +35,25 @@
{{ 'labels.inputs.Is Notification' | translate }}?
</mat-checkbox>
<mat-form-field fxFlex="48%" *ngIf="smsCampaignDetailsForm.controls.recurrenceStartDate" (click)="recurrenceStartDatePicker.open()">
<mat-form-field
fxFlex="48%"
*ngIf="smsCampaignDetailsForm.controls.recurrenceStartDate"
(click)="recurrenceStartDatePicker.open()"
>
<mat-label>{{ 'labels.inputs.Schedule Date' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="recurrenceStartDatePicker"
formControlName="recurrenceStartDate" required>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="recurrenceStartDatePicker"
formControlName="recurrenceStartDate"
required
/>
<mat-datepicker-toggle matSuffix [for]="recurrenceStartDatePicker"></mat-datepicker-toggle>
<mat-datepicker #recurrenceStartDatePicker></mat-datepicker>
<mat-error>
{{ 'labels.inputs.Schedule Date' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Schedule Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -54,14 +65,16 @@
</mat-option>
</mat-select>
<mat-error>
{{ 'labels.inputs.Business Rule' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Business Rule' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
</div>
<mifosx-edit-business-rule-parameters [paramData]="paramData" [smsCampaign]="smsCampaign"
(templateParameters)="passParameters($event)">
<mifosx-edit-business-rule-parameters
[paramData]="paramData"
[smsCampaign]="smsCampaign"
(templateParameters)="passParameters($event)"
>
</mifosx-edit-business-rule-parameters>
</form>
@@ -1,61 +1,65 @@
<div fxLayout="column">
<mat-divider fxFlex="98%"></mat-divider>
<h3 fxFlex="98%" class="mat-h3">{{ 'labels.heading.Business Rule Parameters' | translate }}</h3>
<form [formGroup]="ReportForm">
<div fxLayout="row wrap" fxLayoutGap="2%">
<ng-container *ngFor="let param of paramData" [ngSwitch]="param.displayType">
<ng-container *ngFor="let param of paramData" [ngSwitch]="param.displayType">
<ng-container *ngIf="ReportForm.contains(param.name)">
<mat-form-field fxFlex="48%" *ngSwitchCase="'text'">
<mat-label>{{param.label}}</mat-label>
<input matInput required [formControlName]="param.name">
<mat-label>{{ param.label }}</mat-label>
<input matInput required [formControlName]="param.name" />
<mat-error *ngIf="ReportForm.controls[param.name].hasError('required')">
{{param.label}} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ param.label }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%" *ngSwitchCase="'date'" (click)="runReportDatePicker.open()">
<mat-label>{{param.label}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="runReportDatePicker" required
[formControlName]="param.name">
<mat-label>{{ param.label }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="runReportDatePicker"
required
[formControlName]="param.name"
/>
<mat-datepicker-toggle matSuffix [for]="runReportDatePicker"></mat-datepicker-toggle>
<mat-datepicker #runReportDatePicker></mat-datepicker>
<mat-error *ngIf="ReportForm.controls[param.name].hasError('required')">
{{param.label}} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ param.label }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%" *ngSwitchCase="'select'">
<mat-label>{{param.label}}</mat-label>
<mat-label>{{ param.label }}</mat-label>
<mat-select required [formControlName]="param.name">
<mat-option *ngFor="let option of param.selectOptions" [value]="option">
{{option.name}}
{{ option.name }}
</mat-option>
</mat-select>
<mat-error *ngIf="ReportForm.controls[param.name].hasError('required')">
{{param.label}} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ param.label }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
</ng-container>
</ng-container>
</div>
</form>
</div>
<div class="margin-t" fxLayoutAlign="center">
<button mat-raised-button matStepperNext color="primary" (click)="getResponseHeaders()"
[disabled]="!this.ReportForm.valid">
<button
mat-raised-button
matStepperNext
color="primary"
(click)="getResponseHeaders()"
[disabled]="!this.ReportForm.valid"
>
{{ 'labels.buttons.Get Parameters' | translate }}
</button>
</div>
@@ -1,17 +1,15 @@
<form [formGroup]="smsCampaignDetailsForm">
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column" fxLayoutAlign.gt-sm="start center">
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Campaign Name' | translate }}</mat-label>
<input matInput formControlName="campaignName" required>
<input matInput formControlName="campaignName" required />
<mat-error>
{{ 'labels.inputs.Campaign Name' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Campaign Name' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%"
*ngIf="!smsCampaignDetailsForm.controls.isNotification.value">
<mat-form-field fxFlex="48%" *ngIf="!smsCampaignDetailsForm.controls.isNotification.value">
<mat-label>{{ 'labels.inputs.SMS Provider' | translate }}</mat-label>
<mat-select formControlName="providerId">
<mat-option *ngFor="let provider of smsProviders" [value]="provider.id">
@@ -28,7 +26,8 @@
</mat-option>
</mat-select>
<mat-error>
{{ 'labels.inputs.Trigger Type' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Trigger Type' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -36,20 +35,29 @@
{{ 'labels.inputs.Is Notification' | translate }}?
</mat-checkbox>
<mat-form-field fxFlex="48%"
*ngIf="smsCampaignDetailsForm.contains('recurrenceStartDate')" (click)="recurrenceStartDatePicker.open()">
<mat-form-field
fxFlex="48%"
*ngIf="smsCampaignDetailsForm.contains('recurrenceStartDate')"
(click)="recurrenceStartDatePicker.open()"
>
<mat-label>{{ 'labels.inputs.Schedule Date' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="recurrenceStartDatePicker"
formControlName="recurrenceStartDate" required>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="recurrenceStartDatePicker"
formControlName="recurrenceStartDate"
required
/>
<mat-datepicker-toggle matSuffix [for]="recurrenceStartDatePicker"></mat-datepicker-toggle>
<mat-datepicker #recurrenceStartDatePicker></mat-datepicker>
<mat-error>
{{ 'labels.inputs.Schedule Date' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Schedule Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%"
*ngIf="smsCampaignDetailsForm.contains('frequency')">
<mat-form-field fxFlex="48%" *ngIf="smsCampaignDetailsForm.contains('frequency')">
<mat-label>{{ 'labels.inputs.Repeats' | translate }}</mat-label>
<mat-select formControlName="frequency" required>
<mat-option [value]="1">{{ 'labels.inputs.Daily' | translate }}</mat-option>
@@ -58,12 +66,12 @@
<mat-option [value]="4">{{ 'labels.inputs.Yearly' | translate }}</mat-option>
</mat-select>
<mat-error>
{{ 'labels.inputs.Repetition Frequency' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Repetition Frequency' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%"
*ngIf="smsCampaignDetailsForm.contains('interval')">
<mat-form-field fxFlex="48%" *ngIf="smsCampaignDetailsForm.contains('interval')">
<mat-label>{{ 'labels.inputs.Repetition Interval' | translate }}</mat-label>
<mat-select formControlName="interval" required>
<mat-option *ngFor="let interval of repetitionIntervals" [value]="interval">
@@ -71,12 +79,12 @@
</mat-option>
</mat-select>
<mat-error>
{{ 'labels.inputs.Repetition Interval' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Repetition Interval' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%"
*ngIf="smsCampaignDetailsForm.contains('repeatsOnDay')">
<mat-form-field fxFlex="48%" *ngIf="smsCampaignDetailsForm.contains('repeatsOnDay')">
<mat-label>{{ 'labels.inputs.Repeats on Day' | translate }}</mat-label>
<mat-select formControlName="repeatsOnDay" required>
<mat-option value="1">{{ 'labels.inputs.Monday' | translate }}</mat-option>
@@ -88,8 +96,8 @@
<mat-option value="7">{{ 'labels.inputs.Sunday' | translate }}</mat-option>
</mat-select>
<mat-error>
{{"labels.inputs.At least" |translate}} <strong>{{"labels.inputs.one" |translate}}</strong> {{"labels.inputs.day must be selected" |translate}}
{{ 'labels.inputs.At least' | translate }} <strong>{{ 'labels.inputs.one' | translate }}</strong>
{{ 'labels.inputs.day must be selected' | translate }}
</mat-error>
</mat-form-field>
@@ -101,14 +109,20 @@
</mat-option>
</mat-select>
<mat-error>
{{ 'labels.inputs.Business Rule' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Business Rule' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%"
*ngIf="!smsCampaignDetailsForm.controls.runReportId.value">
<div
fxLayout="row"
class="margin-t"
fxLayout.xs="column"
fxLayoutAlign="center"
fxLayoutGap="2%"
*ngIf="!smsCampaignDetailsForm.controls.runReportId.value"
>
<button mat-raised-button matStepperPrevious disabled>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Previous' | translate }}
@@ -125,5 +139,4 @@
(templateParameters)="passParameters($event)"
>
</mifosx-business-rule-parameters>
</form>
@@ -1,66 +1,63 @@
<div class="container m-b-20" fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px">
<button mat-raised-button color="primary" [routerLink]="['create']" *mifosxHasPermission="'CREATE_SMSCAMPAIGN'">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Create SMS Campaign' | translate }}
</button>
</div>
<div class="container">
<div fxLayout="row" fxLayoutGap="20px">
<mat-form-field fxFlex>
<mat-label>{{'labels.inputs.Filter' | translate}}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)">
<mat-label>{{ 'labels.inputs.Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
</div>
<div class="mat-elevation-z8 table-container">
<table mat-table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="campaignName">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.name' | translate }} </th>
<td mat-cell *matCellDef="let smsCampaign"> {{ smsCampaign.campaignName }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.name' | translate }}</th>
<td mat-cell *matCellDef="let smsCampaign">{{ smsCampaign.campaignName }}</td>
</ng-container>
<ng-container matColumnDef="campaignMessage">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Template Message' | translate }} </th>
<td mat-cell *matCellDef="let smsCampaign"> {{ smsCampaign.campaignMessage }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Template Message' | translate }}</th>
<td mat-cell *matCellDef="let smsCampaign">{{ smsCampaign.campaignMessage }}</td>
</ng-container>
<ng-container matColumnDef="campaignType.value">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Campaign Type' | translate }} </th>
<td mat-cell *matCellDef="let smsCampaign"> {{ smsCampaign.campaignType.value }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Campaign Type' | translate }}</th>
<td mat-cell *matCellDef="let smsCampaign">{{ smsCampaign.campaignType.value }}</td>
</ng-container>
<ng-container matColumnDef="triggerType.value">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Trigger Type' | translate }} </th>
<td mat-cell *matCellDef="let smsCampaign"> {{ smsCampaign.triggerType.value }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Trigger Type' | translate }}</th>
<td mat-cell *matCellDef="let smsCampaign">{{ smsCampaign.triggerType.value }}</td>
</ng-container>
<ng-container matColumnDef="campaignStatus.value">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Status' | translate }} </th>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Status' | translate }}</th>
<td mat-cell *matCellDef="let smsCampaign">
<div [className]="smsCampaign.campaignStatus.code | statusLookup">
<fa-icon matTooltip="{{ smsCampaign.campaignStatus.value | titlecase }}" matTooltipPosition="right" icon="circle" size="lg"></fa-icon>
<fa-icon
matTooltip="{{ smsCampaign.campaignStatus.value | titlecase }}"
matTooltipPosition="right"
icon="circle"
size="lg"
></fa-icon>
</div>
</td>
</ng-container>
<ng-container matColumnDef="smsCampaignTimeLine.submittedByUsername">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Approved By' | translate }} </th>
<td mat-cell *matCellDef="let smsCampaign"> {{ smsCampaign.smsCampaignTimeLine.submittedByUsername }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Approved By' | translate }}</th>
<td mat-cell *matCellDef="let smsCampaign">{{ smsCampaign.smsCampaignTimeLine.submittedByUsername }}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;" class="select-row" [routerLink]="[row.id]"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns" class="select-row" [routerLink]="[row.id]"></tr>
</table>
<mat-paginator [pageSizeOptions]="[10, 25, 50, 100]" showFirstLastButtons></mat-paginator>
</div>
</div>
@@ -1,51 +1,54 @@
<div class="container">
<div fxLayout="row" fxLayoutGap="1%" fxLayoutAlign="flex-end" class="action-buttons m-b-20">
<span *ngIf="smsCampaignData.campaignStatus.value !== 'active'">
<button mat-raised-button color="primary" *mifosxHasPermission="'UPDATE_SMSCAMPAIGN'" [routerLink]="['edit']">
<fa-icon icon="edit" class="m-r-10"></fa-icon>{{'labels.buttons.Edit' | translate }}
<fa-icon icon="edit" class="m-r-10"></fa-icon>{{ 'labels.buttons.Edit' | translate }}
</button>
</span>
<span *ngIf="smsCampaignData.campaignStatus.value === 'Pending'">
<button mat-raised-button color="accent" *mifosxHasPermission="'ACTIVATE_SMSCAMPAIGN'" (click)="activateCampaign()">
<fa-icon icon="lock-open" class="m-r-10"></fa-icon>{{'labels.buttons.Activate' | translate }}
<button
mat-raised-button
color="accent"
*mifosxHasPermission="'ACTIVATE_SMSCAMPAIGN'"
(click)="activateCampaign()"
>
<fa-icon icon="lock-open" class="m-r-10"></fa-icon>{{ 'labels.buttons.Activate' | translate }}
</button>
</span>
<span *ngIf="smsCampaignData.campaignStatus.value !== 'closed'">
<button mat-raised-button color="warn" *mifosxHasPermission="'CLOSE_SMSCAMPAIGN'" (click)="closeCampaign()">
<fa-icon icon="times" class="m-r-10"></fa-icon>{{'labels.buttons.Close' | translate }}
<fa-icon icon="times" class="m-r-10"></fa-icon>{{ 'labels.buttons.Close' | translate }}
</button>
</span>
<span *ngIf="smsCampaignData.campaignStatus.value !== 'Pending' && smsCampaignData.campaignStatus.value !== 'active'">
<button mat-raised-button color="accent" *mifosxHasPermission="'REACTIVATE_SMSCAMPAIGN'" (click)="reactivateCampaign()">
<fa-icon icon="undo" class="m-r-10"></fa-icon>{{'labels.buttons.Reactivate' | translate }}
<span
*ngIf="smsCampaignData.campaignStatus.value !== 'Pending' && smsCampaignData.campaignStatus.value !== 'active'"
>
<button
mat-raised-button
color="accent"
*mifosxHasPermission="'REACTIVATE_SMSCAMPAIGN'"
(click)="reactivateCampaign()"
>
<fa-icon icon="undo" class="m-r-10"></fa-icon>{{ 'labels.buttons.Reactivate' | translate }}
</button>
</span>
<span *ngIf="smsCampaignData.campaignStatus.value === 'closed'">
<button mat-raised-button color="warn" *mifosxHasPermission="'DELETE_SMSCAMPAIGN'" (click)="deleteCampaign()">
<fa-icon icon="trash" class="m-r-10"></fa-icon>{{'labels.buttons.Delete' | translate }}
<fa-icon icon="trash" class="m-r-10"></fa-icon>{{ 'labels.buttons.Delete' | translate }}
</button>
</span>
</div>
<mat-card class="sms-card">
<mat-card-content>
<mat-tab-group (selectedTabChange)="onTabChange($event)">
<mat-tab label="Campaign">
<div class="tab-content mat-typography">
<mat-list>
<mat-list-item>
{{ 'labels.inputs.Campaign Name' | translate }} : {{ smsCampaignData.campaignName }}
</mat-list-item>
@@ -63,7 +66,8 @@
</mat-list-item>
<mat-list-item>
{{ 'labels.inputs.Submitted on' | translate }} : {{ smsCampaignData.smsCampaignTimeLine.submittedOnDate | dateFormat }}
{{ 'labels.inputs.Submitted on' | translate }} :
{{ smsCampaignData.smsCampaignTimeLine.submittedOnDate | dateFormat }}
</mat-list-item>
<mat-list-item *ngIf="smsCampaignData.recurrence">
@@ -71,81 +75,78 @@
</mat-list-item>
<div fxLayout="column" fxLayoutGap="10px" class="template-message">
<h3>{{'labels.heading.Template Message' | translate }} :</h3>
<textarea matInput disabled>{{ smsCampaignData.campaignMessage}}</textarea>
<h3>{{ 'labels.heading.Template Message' | translate }} :</h3>
<textarea matInput disabled>{{ smsCampaignData.campaignMessage }}</textarea>
</div>
</mat-list>
</div>
</mat-tab>
<mat-tab *ngFor = "let tab of smsTabs" [label]="tab.label">
<mat-tab *ngFor="let tab of smsTabs" [label]="tab.label">
<div class="tab-content mat-typography">
<form [formGroup]="smsForm" (ngSubmit)="search()">
<div fxLayout="row" fxLayoutGap="3%" fxLayoutAlign="center">
<mat-form-field (click)="fromDatePicker.open()">
<mat-label>{{ 'labels.inputs.From Date' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="fromDatePicker" formControlName="fromDate">
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="fromDatePicker"
formControlName="fromDate"
/>
<mat-datepicker-toggle matSuffix [for]="fromDatePicker"></mat-datepicker-toggle>
<mat-datepicker #fromDatePicker></mat-datepicker>
</mat-form-field>
<mat-form-field (click)="toDatePicker.open()">
<mat-label>{{ 'labels.inputs.To Date' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="toDatePicker" formControlName="toDate">
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="toDatePicker"
formControlName="toDate"
/>
<mat-datepicker-toggle matSuffix [for]="toDatePicker"></mat-datepicker-toggle>
<mat-datepicker #toDatePicker></mat-datepicker>
</mat-form-field>
<div class="search-button" >
<div class="search-button">
<button mat-raised-button color="primary">
<fa-icon icon="search" class="m-r-10"></fa-icon>{{'labels.buttons.Search' | translate }}</button>
<fa-icon icon="search" class="m-r-10"></fa-icon>{{ 'labels.buttons.Search' | translate }}
</button>
</div>
</div>
</form>
<table #messageTable mat-table [dataSource]="dataSource" class="mat-elevation-z1 m-b-25">
<ng-container matColumnDef="Message">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Message' | translate }} </th>
<td mat-cell *matCellDef="let sms">{{sms.message}}</td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Message' | translate }}</th>
<td mat-cell *matCellDef="let sms">{{ sms.message }}</td>
</ng-container>
<ng-container matColumnDef="Status">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Status' | translate }} </th>
<td mat-cell *matCellDef="let sms">{{sms.status.value}}</td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Status' | translate }}</th>
<td mat-cell *matCellDef="let sms">{{ sms.status.value }}</td>
</ng-container>
<ng-container matColumnDef="Mobile No.">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Mobile No' | translate }}. </th>
<td mat-cell *matCellDef="let sms">{{sms.mobileNo}} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Mobile No' | translate }}.</th>
<td mat-cell *matCellDef="let sms">{{ sms.mobileNo }}</td>
</ng-container>
<ng-container matColumnDef="Campaign Name">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Campaign Name' | translate }} </th>
<td mat-cell *matCellDef="let sms">{{sms.campaignName}}</td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Campaign Name' | translate }}</th>
<td mat-cell *matCellDef="let sms">{{ sms.campaignName }}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
</table>
</div>
</mat-tab>
</mat-tab-group>
</mat-card-content>
</mat-card>
</div>
@@ -1,27 +1,25 @@
<div class="container input">
<mat-card *ngIf="!isCollapsed">
<form [formGroup]="instructionForm" (ngSubmit)="search()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.Client Name' | translate }}</mat-label>
<input matInput formControlName="clientName">
<input matInput formControlName="clientName" />
</mat-form-field>
<mat-form-field>
<mat-label>{{ 'labels.inputs.Client Id' | translate }}</mat-label>
<input matInput formControlName="clientId">
<input matInput formControlName="clientId" />
</mat-form-field>
<mat-form-field>
<mat-label>{{ 'labels.inputs.Transfer Type' | translate }}</mat-label>
<mat-select formControlName="transferType">
<mat-option *ngFor="let transferType of standingInstructionsTemplate.transferTypeOptions" [value]="transferType.id">
<mat-option
*ngFor="let transferType of standingInstructionsTemplate.transferTypeOptions"
[value]="transferType.id"
>
{{ transferType.value }}
</mat-option>
</mat-select>
@@ -30,7 +28,10 @@
<mat-form-field>
<mat-label>{{ 'labels.inputs.Account Type' | translate }}</mat-label>
<mat-select formControlName="fromAccountType">
<mat-option *ngFor="let accountType of standingInstructionsTemplate.fromAccountTypeOptions" [value]="accountType.id">
<mat-option
*ngFor="let accountType of standingInstructionsTemplate.fromAccountTypeOptions"
[value]="accountType.id"
>
{{ accountType.value }}
</mat-option>
</mat-select>
@@ -38,45 +39,46 @@
<mat-form-field *ngIf="instructionForm.contains('fromAccountId')">
<mat-label>{{ 'labels.inputs.From Account ID' | translate }}</mat-label>
<input matInput formControlName="fromAccountId">
<input matInput formControlName="fromAccountId" />
</mat-form-field>
<mat-form-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>
<mat-form-field (click)="toDatePicker.open()">
<mat-label>{{ 'labels.inputs.To Date' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" formControlName="toDate" [matDatepicker]="toDatePicker">
<input matInput [min]="minDate" [max]="maxDate" formControlName="toDate" [matDatepicker]="toDatePicker" />
<mat-datepicker-toggle matSuffix [for]="toDatePicker"></mat-datepicker-toggle>
<mat-datepicker #toDatePicker></mat-datepicker>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../']">{{ 'labels.buttons.Cancel' | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button mat-raised-button color="primary" *mifosxHasPermission="'READ_STANDINGINSTRUCTION'">
<fa-icon icon="search"></fa-icon>
&nbsp; {{ 'labels.buttons.Search Instructions' | translate }}
</button>
</mat-card-actions>
</form>
</mat-card>
</div>
<div class="container output" *ngIf="isCollapsed">
<mat-card>
<div class="m-b-20">
<button mat-raised-button color="primary" (click)="isCollapsed = false">
{{ 'labels.buttons.Parameters' | translate }}
@@ -84,58 +86,68 @@
</div>
<table class="mat-elevation-z1" mat-table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="fromClient">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.From Client' | translate }} </th>
<td mat-cell *matCellDef="let instruction"> {{ instruction.fromClient.displayName }}({{ instruction.fromClient.id }}) </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.From Client' | translate }}</th>
<td mat-cell *matCellDef="let instruction">
{{ instruction.fromClient.displayName }}({{ instruction.fromClient.id }})
</td>
</ng-container>
<ng-container matColumnDef="fromAccount">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.From Account' | translate }} </th>
<td mat-cell *matCellDef="let instruction"> {{ instruction.fromAccount.productName }}({{ instruction.fromAccount.id }}) </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.From Account' | translate }}</th>
<td mat-cell *matCellDef="let instruction">
{{ instruction.fromAccount.productName }}({{ instruction.fromAccount.id }})
</td>
</ng-container>
<ng-container matColumnDef="toClient">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.To Client' | translate }} </th>
<td mat-cell *matCellDef="let instruction"> {{ instruction.toClient.displayName }}({{ instruction.toClient.id }}) </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.To Client' | translate }}</th>
<td mat-cell *matCellDef="let instruction">
{{ instruction.toClient.displayName }}({{ instruction.toClient.id }})
</td>
</ng-container>
<ng-container matColumnDef="toAccount">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.To Account' | translate }} </th>
<td mat-cell *matCellDef="let instruction"> {{ instruction.toAccount.productName }}({{ instruction.toAccount.id }}) </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.To Account' | translate }}</th>
<td mat-cell *matCellDef="let instruction">
{{ instruction.toAccount.productName }}({{ instruction.toAccount.id }})
</td>
</ng-container>
<ng-container matColumnDef="executionTime">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Execution Time' | translate }} </th>
<td mat-cell *matCellDef="let instruction"> {{ instruction.executionTime }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Execution Time' | translate }}</th>
<td mat-cell *matCellDef="let instruction">{{ instruction.executionTime }}</td>
</ng-container>
<ng-container matColumnDef="amount">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Amount' | translate }} </th>
<td mat-cell *matCellDef="let instruction"> {{ instruction.amount | formatNumber }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Amount' | translate }}</th>
<td mat-cell *matCellDef="let instruction">{{ instruction.amount | formatNumber }}</td>
</ng-container>
<ng-container matColumnDef="status">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Status' | translate }} </th>
<td mat-cell *matCellDef="let instruction"> {{ instruction.status }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Status' | translate }}</th>
<td mat-cell *matCellDef="let instruction">{{ instruction.status }}</td>
</ng-container>
<ng-container matColumnDef="errorLog">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Error Log' | translate }} </th>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Error Log' | translate }}</th>
<td mat-cell *matCellDef="let instruction">
<button *ngIf="instruction.status === 'failed'" class="error-log" mat-raised-button color="warn" [matTooltip]="instruction.errorLog">
<button
*ngIf="instruction.status === 'failed'"
class="error-log"
mat-raised-button
color="warn"
[matTooltip]="instruction.errorLog"
>
<i class="fa fa-exclamation"></i>
</button>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
</table>
<mat-paginator [pageSizeOptions]="[10, 25, 50, 100]" showFirstLastButtons></mat-paginator>
</mat-card>
</div>
@@ -1,40 +1,43 @@
<div class="container">
<mat-card>
<form [formGroup]="allocateCashForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Office' | translate }}</mat-label>
<input matInput required formControlName="office">
<input matInput required formControlName="office" />
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Teller Name' | translate }}</mat-label>
<input matInput required formControlName="tellerName">
<input matInput required formControlName="tellerName" />
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Cashier' | translate }}</mat-label>
<input matInput required formControlName="cashier">
<input matInput required formControlName="cashier" />
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Assignment Period' | translate }}</mat-label>
<input matInput formControlName="assignmentPeriod">
<input matInput formControlName="assignmentPeriod" />
</mat-form-field>
<mat-form-field fxFlex="48%" (click)="cashDatePicker.open()">
<mat-label>{{ 'labels.inputs.Date' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="cashDatePicker" required formControlName="txnDate">
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="cashDatePicker"
required
formControlName="txnDate"
/>
<mat-datepicker-toggle matSuffix [for]="cashDatePicker"></mat-datepicker-toggle>
<mat-datepicker #cashDatePicker></mat-datepicker>
<mat-error *ngIf="allocateCashForm.controls.txnDate.hasError('required')">
{{ 'labels.inputs.Date' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -46,37 +49,44 @@
</mat-option>
</mat-select>
<mat-error *ngIf="allocateCashForm.controls.currencyCode.hasError('required')">
{{ 'labels.inputs.Currency' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Currency' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Amount' | translate }}</mat-label>
<input matInput required formControlName="txnAmount">
<input matInput required formControlName="txnAmount" />
<mat-error *ngIf="allocateCashForm.controls.txnAmount.hasError('required')">
{{ 'labels.inputs.Amount' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Amount' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Notes/Comments' | translate }}</mat-label>
<input matInput required formControlName="txnNote">
<input matInput required formControlName="txnNote" />
<mat-error *ngIf="allocateCashForm.controls.txnNote.hasError('required')">
{{ 'labels.inputs.Notes/Comments' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Notes/Comments' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../']">{{ 'labels.buttons.Cancel' | translate }}</button>
<button mat-raised-button color="primary" [disabled]="!allocateCashForm.valid" *mifosxHasPermission="'ALLOCATECASHIER_TELLER'">{{ 'labels.buttons.Submit' | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!allocateCashForm.valid"
*mifosxHasPermission="'ALLOCATECASHIER_TELLER'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</form>
</mat-card>
</div>
@@ -1,65 +1,85 @@
<div class="container m-b-20" fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px">
<button mat-raised-button color="primary" [routerLink]="['create']" *mifosxHasPermission="'CREATE_CASHIERS_FOR_TELLER'">
<button
mat-raised-button
color="primary"
[routerLink]="['create']"
*mifosxHasPermission="'CREATE_CASHIERS_FOR_TELLER'"
>
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.buttons.New Cashier' | translate }}
</button>
</div>
<div class="container">
<div fxLayout="row" fxLayoutGap="20px">
<mat-form-field fxFlex>
<mat-label>{{'labels.inputs.Filter' | translate}}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)">
<mat-label>{{ 'labels.inputs.Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
</div>
<div class="mat-elevation-z8">
<table mat-table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="period">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Period' | translate }} </th>
<td mat-cell *matCellDef="let cashier"> {{ cashier.startDate | dateFormat }} - {{ cashier.endDate | dateFormat }}</td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Period' | translate }}</th>
<td mat-cell *matCellDef="let cashier">
{{ cashier.startDate | dateFormat }} - {{ cashier.endDate | dateFormat }}
</td>
</ng-container>
<ng-container matColumnDef="staffName">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Cashier/Staff' | translate }} </th>
<td mat-cell *matCellDef="let cashier"> {{ cashier.staffName }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Cashier/Staff' | translate }}</th>
<td mat-cell *matCellDef="let cashier">{{ cashier.staffName }}</td>
</ng-container>
<ng-container matColumnDef="isFullDay">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Full Day/Time' | translate }} </th>
<td mat-cell *matCellDef="let cashier"> {{ cashier.isFullDay | yesNo }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Full Day/Time' | translate }}</th>
<td mat-cell *matCellDef="let cashier">{{ cashier.isFullDay | yesNo }}</td>
</ng-container>
<ng-container matColumnDef="vaultActions">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Vault Actions' | translate }} </th>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Vault Actions' | translate }}</th>
<td mat-cell *matCellDef="let cashier">
<button class="cashier-action-button" mat-raised-button color="accent" matTooltip="{{ 'tooltips.Allocate Cash' | translate }}"
(click)="routeEdit($event)" [routerLink]="[cashier.id, 'allocate']" *mifosxHasPermission="'ALLOCATECASHIER_TELLER'">
<button
class="cashier-action-button"
mat-raised-button
color="accent"
matTooltip="{{ 'tooltips.Allocate Cash' | translate }}"
(click)="routeEdit($event)"
[routerLink]="[cashier.id, 'allocate']"
*mifosxHasPermission="'ALLOCATECASHIER_TELLER'"
>
<i class="fa fa-arrow-up"></i>
</button>
<button class="cashier-action-button" mat-raised-button color="warn" matTooltip="{{ 'tooltips.Settle Cash' | translate }}"
(click)="routeEdit($event)" [routerLink]="[cashier.id, 'settle']" *mifosxHasPermission="'SETTLECASHIER_TELLER'">
<button
class="cashier-action-button"
mat-raised-button
color="warn"
matTooltip="{{ 'tooltips.Settle Cash' | translate }}"
(click)="routeEdit($event)"
[routerLink]="[cashier.id, 'settle']"
*mifosxHasPermission="'SETTLECASHIER_TELLER'"
>
<i class="fa fa-arrow-down"></i>
</button>
<button class="cashier-action-button" mat-raised-button color="primary" matTooltip="{{ 'tooltips.View Transactions' | translate }}"
(click)="routeEdit($event)" [routerLink]="[cashier.id, 'transactions']" *mifosxHasPermission="'ALLOCATECASHIER_TELLER'">
<button
class="cashier-action-button"
mat-raised-button
color="primary"
matTooltip="{{ 'tooltips.View Transactions' | translate }}"
(click)="routeEdit($event)"
[routerLink]="[cashier.id, 'transactions']"
*mifosxHasPermission="'ALLOCATECASHIER_TELLER'"
>
<i class="fa fa-eye"></i>
</button>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;" class="select-row" [routerLink]="[row.id]"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns" class="select-row" [routerLink]="[row.id]"></tr>
</table>
<mat-paginator [pageSizeOptions]="[10, 25, 50, 100]" showFirstLastButtons></mat-paginator>
</div>
</div>
@@ -1,21 +1,16 @@
<div class="container">
<mat-card>
<form [formGroup]="createCashierForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Office' | translate }}</mat-label>
<input matInput required autofocus [value]="cashierTemplate.officeName" disabled>
<input matInput required autofocus [value]="cashierTemplate.officeName" disabled />
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Teller Name' | translate }}</mat-label>
<input matInput required autofocus [value]="cashierTemplate.tellerName" disabled>
<input matInput required autofocus [value]="cashierTemplate.tellerName" disabled />
</mat-form-field>
<mat-form-field fxFlex="48%">
@@ -26,32 +21,49 @@
</mat-option>
</mat-select>
<mat-error *ngIf="createCashierForm.controls.staffId.hasError('required')">
{{ 'labels.inputs.Cashier' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Cashier' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Description/Notes' | translate }}</mat-label>
<input matInput autofocus formControlName="description">
<input matInput autofocus formControlName="description" />
</mat-form-field>
<mat-form-field fxFlex="48%" (click)="fromDatePicker.open()">
<mat-label>{{ 'labels.inputs.From' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="fromDatePicker" required formControlName="startDate">
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="fromDatePicker"
required
formControlName="startDate"
/>
<mat-datepicker-toggle matSuffix [for]="fromDatePicker"></mat-datepicker-toggle>
<mat-datepicker #fromDatePicker></mat-datepicker>
<mat-error *ngIf="createCashierForm.controls.startDate.hasError('required')">
{{ 'labels.inputs.From Date' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.From Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%" (click)="toDatePicker.open()">
<mat-label>{{ 'labels.inputs.To' | translate }}</mat-label>
<input matInput [min]="createCashierForm.value.startDate" [max]="maxDate" [matDatepicker]="toDatePicker" required formControlName="endDate">
<input
matInput
[min]="createCashierForm.value.startDate"
[max]="maxDate"
[matDatepicker]="toDatePicker"
required
formControlName="endDate"
/>
<mat-datepicker-toggle matSuffix [for]="toDatePicker"></mat-datepicker-toggle>
<mat-datepicker #toDatePicker></mat-datepicker>
<mat-error *ngIf="createCashierForm.controls.endDate.hasError('required')">
{{ 'labels.inputs.To Date' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.To Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -60,18 +72,22 @@
{{ 'labels.inputs.Full Day' | translate }}?
</mat-checkbox>
</div>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../']">{{ 'labels.buttons.Cancel' | translate }}</button>
<button mat-raised-button color="primary" [disabled]="!createCashierForm.valid" *mifosxHasPermission="'UPDATECASHIERALLOCATION_TELLER'">{{ 'labels.buttons.Submit' | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!createCashierForm.valid"
*mifosxHasPermission="'UPDATECASHIERALLOCATION_TELLER'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</form>
</mat-card>
</div>
@@ -1,21 +1,16 @@
<div class="container">
<mat-card>
<form [formGroup]="editCashierForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Office' | translate }}</mat-label>
<input matInput required autofocus [value]="cashierData.template.officeName" disabled>
<input matInput required autofocus [value]="cashierData.template.officeName" disabled />
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Teller Name' | translate }}</mat-label>
<input matInput required autofocus [value]="cashierData.data.tellerName" disabled>
<input matInput required autofocus [value]="cashierData.data.tellerName" disabled />
</mat-form-field>
<mat-form-field fxFlex="48%" *ngIf="isStaffId">
@@ -38,25 +33,42 @@
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Description/Notes' | translate }}</mat-label>
<input matInput autofocus formControlName="description">
<input matInput autofocus formControlName="description" />
</mat-form-field>
<mat-form-field fxFlex="48%" (click)="fromDatePicker.open()">
<mat-label>{{ 'labels.inputs.From' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="fromDatePicker" required formControlName="startDate">
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="fromDatePicker"
required
formControlName="startDate"
/>
<mat-datepicker-toggle matSuffix [for]="fromDatePicker"></mat-datepicker-toggle>
<mat-datepicker #fromDatePicker></mat-datepicker>
<mat-error *ngIf="editCashierForm.controls.startDate.hasError('required')">
{{ 'labels.inputs.From Date' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.From Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%" (click)="toDatePicker.open()">
<mat-label>{{ 'labels.inputs.To' | translate }}</mat-label>
<input matInput [min]="editCashierForm.value.startDate" [max]="maxDate" [matDatepicker]="toDatePicker" required formControlName="endDate"> <mat-datepicker-toggle matSuffix [for]="toDatePicker"></mat-datepicker-toggle>
<input
matInput
[min]="editCashierForm.value.startDate"
[max]="maxDate"
[matDatepicker]="toDatePicker"
required
formControlName="endDate"
/>
<mat-datepicker-toggle matSuffix [for]="toDatePicker"></mat-datepicker-toggle>
<mat-datepicker #toDatePicker></mat-datepicker>
<mat-error *ngIf="editCashierForm.controls.endDate.hasError('required')">
{{ 'labels.inputs.To Date' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.To Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -65,18 +77,22 @@
{{ 'labels.inputs.Full Day' | translate }}?
</mat-checkbox>
</div>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../']">{{ 'labels.buttons.Cancel' | translate }}</button>
<button mat-raised-button color="primary" [disabled]="!editCashierForm.valid" *mifosxHasPermission="'UPDATECASHIERALLOCATION_TELLER'">{{ 'labels.buttons.Submit' | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!editCashierForm.valid"
*mifosxHasPermission="'UPDATECASHIERALLOCATION_TELLER'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</form>
</mat-card>
</div>
@@ -1,40 +1,43 @@
<div class="container">
<mat-card>
<form [formGroup]="settleCashForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Office' | translate }}</mat-label>
<input matInput required formControlName="office">
<input matInput required formControlName="office" />
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Teller Name' | translate }}</mat-label>
<input matInput required formControlName="tellerName">
<input matInput required formControlName="tellerName" />
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Cashier' | translate }}</mat-label>
<input matInput required formControlName="cashier">
<input matInput required formControlName="cashier" />
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Assignment Period' | translate }}</mat-label>
<input matInput formControlName="assignmentPeriod">
<input matInput formControlName="assignmentPeriod" />
</mat-form-field>
<mat-form-field fxFlex="48%" (click)="cashDatePicker.open()">
<mat-label>{{ 'labels.inputs.Date' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="cashDatePicker" required formControlName="txnDate">
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="cashDatePicker"
required
formControlName="txnDate"
/>
<mat-datepicker-toggle matSuffix [for]="cashDatePicker"></mat-datepicker-toggle>
<mat-datepicker #cashDatePicker></mat-datepicker>
<mat-error *ngIf="settleCashForm.controls.txnDate.hasError('required')">
{{ 'labels.inputs.Date' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -46,37 +49,44 @@
</mat-option>
</mat-select>
<mat-error *ngIf="settleCashForm.controls.currencyCode.hasError('required')">
{{ 'labels.inputs.Currency' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Currency' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Amount' | translate }}</mat-label>
<input matInput required formControlName="txnAmount">
<input matInput required formControlName="txnAmount" />
<mat-error *ngIf="settleCashForm.controls.txnAmount.hasError('required')">
{{ 'labels.inputs.Amount' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Amount' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Notes/Comments' | translate }}</mat-label>
<input matInput required formControlName="txnNote">
<input matInput required formControlName="txnNote" />
<mat-error *ngIf="settleCashForm.controls.txnNote.hasError('required')">
{{ 'labels.inputs.Notes/Comments' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Notes/Comments' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../']">{{ 'labels.buttons.Cancel' | translate }}</button>
<button mat-raised-button color="primary" [disabled]="!settleCashForm.valid" *mifosxHasPermission="'SETTLECASHFROMCASHIER_TELLER'">{{ 'labels.buttons.Settle Cash' | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!settleCashForm.valid"
*mifosxHasPermission="'SETTLECASHFROMCASHIER_TELLER'"
>
{{ 'labels.buttons.Settle Cash' | translate }}
</button>
</mat-card-actions>
</form>
</mat-card>
</div>
@@ -1,71 +1,70 @@
<div fxLayout="row" fxLayoutGap="1%" fxLayoutAlign="end" class="container m-b-20">
<button mat-raised-button color="primary" [routerLink]="['../allocate']" *mifosxHasPermission="'ALLOCATECASHIER_TELLER'">
<fa-icon icon="arrow-up" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Allocate Cash' | translate }}
<button
mat-raised-button
color="primary"
[routerLink]="['../allocate']"
*mifosxHasPermission="'ALLOCATECASHIER_TELLER'"
>
<fa-icon icon="arrow-up" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Allocate Cash' | translate }}
</button>
<button mat-raised-button color="warn" [routerLink]="['../settle']" *mifosxHasPermission="'SETTLECASHFROMCASHIER_TELLER'">
<fa-icon icon="arrow-down" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Settle Cash' | translate }}
<button
mat-raised-button
color="warn"
[routerLink]="['../settle']"
*mifosxHasPermission="'SETTLECASHFROMCASHIER_TELLER'"
>
<fa-icon icon="arrow-down" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Settle Cash' | translate }}
</button>
</div>
<div class="container m-b-20" *ngIf="cashierData">
<mat-card class="mat-elevation-z8">
<mat-card-content>
<div fxLayout="row wrap" class="content">
<div fxFlex="25%" fxFlex.lt-md="50%" class="header">
{{ 'labels.inputs.Branch' | translate }}
</div>
<div fxFlex="25%" fxFlex.lt-md="50%">
{{ cashierData.officeName }}
</div>
<div fxFlex="25%" fxFlex.lt-md="50%" class="header">
{{ 'labels.inputs.Teller' | translate }}
</div>
<div fxFlex="25%" fxFlex.lt-md="50%">
{{ cashierData.tellerName }}
</div>
<div fxFlex="25%" fxFlex.lt-md="50%" class="header">
{{ 'labels.inputs.Cashier' | translate }}
</div>
<div fxFlex="25%" fxFlex.lt-md="50%">
{{ cashierData.cashierName }}
</div>
<div fxFlex="25%" fxFlex.lt-md="50%" class="header">
{{ 'labels.inputs.Net Cash' | translate }}
</div>
<div fxFlex="25%" fxFlex.lt-md="50%">
{{ cashierData.netCash | formatNumber }} [{{currencySelector.value}}]
</div>
<mat-card class="mat-elevation-z8">
<mat-card-content>
<div fxLayout="row wrap" class="content">
<div fxFlex="25%" fxFlex.lt-md="50%" class="header">
{{ 'labels.inputs.Branch' | translate }}
</div>
</mat-card-content>
<div fxFlex="25%" fxFlex.lt-md="50%">
{{ cashierData.officeName }}
</div>
</mat-card>
<div fxFlex="25%" fxFlex.lt-md="50%" class="header">
{{ 'labels.inputs.Teller' | translate }}
</div>
<div fxFlex="25%" fxFlex.lt-md="50%">
{{ cashierData.tellerName }}
</div>
<div fxFlex="25%" fxFlex.lt-md="50%" class="header">
{{ 'labels.inputs.Cashier' | translate }}
</div>
<div fxFlex="25%" fxFlex.lt-md="50%">
{{ cashierData.cashierName }}
</div>
<div fxFlex="25%" fxFlex.lt-md="50%" class="header">
{{ 'labels.inputs.Net Cash' | translate }}
</div>
<div fxFlex="25%" fxFlex.lt-md="50%">
{{ cashierData.netCash | formatNumber }} [{{ currencySelector.value }}]
</div>
</div>
</mat-card-content>
</mat-card>
</div>
<div class="container">
<mat-card fxLayout="column" fxLayoutGap="2%" class="mat-elevation-z8">
<div fxLayout="row" fxLayoutGap="2%">
<mat-form-field fxFlex>
<mat-label>{{'labels.inputs.Filter' | translate}}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)">
<mat-label>{{ 'labels.inputs.Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
<mat-form-field>
@@ -76,52 +75,61 @@
</mat-option>
</mat-select>
</mat-form-field>
</div>
<div *ngIf="cashierData">
<table class="mat-elevation-z1" mat-table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="date">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Date' | translate }} </th>
<td mat-cell *matCellDef="let transaction"> {{ transaction.txnDate | dateFormat }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Date' | translate }}</th>
<td mat-cell *matCellDef="let transaction">{{ transaction.txnDate | dateFormat }}</td>
</ng-container>
<ng-container matColumnDef="transactions">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Transactions' | translate }} </th>
<td mat-cell *matCellDef="let transaction"> {{ transaction.txnType.value }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Transactions' | translate }}</th>
<td mat-cell *matCellDef="let transaction">{{ transaction.txnType.value }}</td>
</ng-container>
<ng-container matColumnDef="allocation">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Allocation' | translate }} ({{cashierData.sumCashAllocation | formatNumber}}) </th>
<td mat-cell *matCellDef="let transaction"> {{ transaction.txnType.value === "Allocate Cash" ? (transaction.txnAmount | formatNumber) : '-' }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>
{{ 'labels.inputs.Allocation' | translate }} ({{ cashierData.sumCashAllocation | formatNumber }})
</th>
<td mat-cell *matCellDef="let transaction">
{{ transaction.txnType.value === 'Allocate Cash' ? (transaction.txnAmount | formatNumber) : '-' }}
</td>
</ng-container>
<ng-container matColumnDef="cashIn">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Cash In' | translate }} ({{cashierData.sumInwardCash | formatNumber}}) </th>
<td mat-cell *matCellDef="let transaction"> {{ transaction.txnType.value === "Cash In" ? (transaction.txnAmount | formatNumber) : '-' }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>
{{ 'labels.inputs.Cash In' | translate }} ({{ cashierData.sumInwardCash | formatNumber }})
</th>
<td mat-cell *matCellDef="let transaction">
{{ transaction.txnType.value === 'Cash In' ? (transaction.txnAmount | formatNumber) : '-' }}
</td>
</ng-container>
<ng-container matColumnDef="cashOut">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Cash Out' | translate }} ({{cashierData.sumOutwardCash | formatNumber}}) </th>
<td mat-cell *matCellDef="let transaction"> {{ transaction.txnType.value === "Cash Out" ? (transaction.txnAmount | formatNumber) : '-' }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>
{{ 'labels.inputs.Cash Out' | translate }} ({{ cashierData.sumOutwardCash | formatNumber }})
</th>
<td mat-cell *matCellDef="let transaction">
{{ transaction.txnType.value === 'Cash Out' ? (transaction.txnAmount | formatNumber) : '-' }}
</td>
</ng-container>
<ng-container matColumnDef="settlement">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Settlement' | translate }} ({{cashierData.sumCashSettlement | formatNumber}})</th>
<td mat-cell *matCellDef="let transaction"> {{ transaction.txnType.value === "Settle Cash" ? (transaction.txnAmount | formatNumber) : '-' }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>
{{ 'labels.inputs.Settlement' | translate }} ({{ cashierData.sumCashSettlement | formatNumber }})
</th>
<td mat-cell *matCellDef="let transaction">
{{ transaction.txnType.value === 'Settle Cash' ? (transaction.txnAmount | formatNumber) : '-' }}
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
</table>
<mat-paginator [pageSizeOptions]="[10, 25, 50, 100]" showFirstLastButtons></mat-paginator>
</div>
</mat-card>
</div>
@@ -1,33 +1,28 @@
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column" class="container m-b-20">
<button mat-raised-button color="primary" [routerLink]="['edit']" *mifosxHasPermission="'UPDATE_CASHIER'">
<fa-icon icon="edit" class="m-r-10"></fa-icon>
{{'labels.buttons.Edit' | translate}}
{{ 'labels.buttons.Edit' | translate }}
</button>
<button mat-raised-button color="warn" (click)="deleteCashier()" *mifosxHasPermission="'DELETECASHIER_TELLER'">
<fa-icon icon="trash" class="m-r-10"></fa-icon>
{{'labels.buttons.Delete' | translate}}
{{ 'labels.buttons.Delete' | translate }}
</button>
</div>
<div class="container">
<mat-card>
<mat-card-content>
<div fxLayout="row wrap" class="content">
<div fxFlex="50%" class="header">
{{'labels.inputs.Name' | translate}}
{{ 'labels.inputs.Name' | translate }}
</div>
<div fxFlex="50%">
{{ cashierData.staffName}}
{{ cashierData.staffName }}
</div>
<div fxFlex="50%" class="header">
{{'labels.inputs.Teller' | translate}}
{{ 'labels.inputs.Teller' | translate }}
</div>
<div fxFlex="50%">
@@ -35,7 +30,7 @@
</div>
<div fxFlex="50%" class="header" *ngIf="cashierData.description !== ''">
{{'labels.inputs.Description' | translate}}
{{ 'labels.inputs.Description' | translate }}
</div>
<div fxFlex="50%" *ngIf="cashierData.description !== ''">
@@ -43,7 +38,7 @@
</div>
<div fxFlex="50%" class="header">
{{'labels.inputs.Start Date' | translate}}
{{ 'labels.inputs.Start Date' | translate }}
</div>
<div fxFlex="50%">
@@ -51,7 +46,7 @@
</div>
<div fxFlex="50%" class="header">
{{'labels.inputs.End Date' | translate}}
{{ 'labels.inputs.End Date' | translate }}
</div>
<div fxFlex="50%">
@@ -59,20 +54,19 @@
</div>
<div fxFlex="50%" class="header">
{{'labels.inputs.Full Day/Time' | translate}}
{{ 'labels.inputs.Full Day/Time' | translate }}
</div>
<div fxFlex="50%">
{{ cashierData.isFullDay }}
</div>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" color="primary" mat-raised-button [routerLink]="['..']">{{ "labels.buttons.Back" | translate}}</button>
<button type="button" color="primary" mat-raised-button [routerLink]="['..']">
{{ 'labels.buttons.Back' | translate }}
</button>
</mat-card-actions>
</mat-card>
</div>
@@ -1,21 +1,18 @@
<div class="container">
<mat-card>
<form [formGroup]="tellerForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.Teller Name' | translate }}</mat-label>
<input matInput required formControlName="name">
<input matInput required formControlName="name" />
<mat-error *ngIf="tellerForm.controls.name.hasError('required')">
{{ 'labels.inputs.Teller Name' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Teller Name' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
<mat-error *ngIf="tellerForm.controls.name.hasError('pattern')">
{{ 'labels.inputs.Teller Name' | translate }} <strong>{{'labels.commons.cannot' | translate }}</strong> {{'labels.commons.begin with a special character or number' | translate }}
{{ 'labels.inputs.Teller Name' | translate }} <strong>{{ 'labels.commons.cannot' | translate }}</strong>
{{ 'labels.commons.begin with a special character or number' | translate }}
</mat-error>
</mat-form-field>
@@ -27,7 +24,8 @@
</mat-option>
</mat-select>
<mat-error *ngIf="tellerForm.controls.officeId.hasError('required')">
{{ 'labels.inputs.Office' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Office' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
@@ -38,17 +36,31 @@
<mat-form-field (click)="startDatePicker.open()">
<mat-label>{{ 'labels.inputs.Start Date' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="startDatePicker" required formControlName="startDate">
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="startDatePicker"
required
formControlName="startDate"
/>
<mat-datepicker-toggle matSuffix [for]="startDatePicker"></mat-datepicker-toggle>
<mat-datepicker #startDatePicker></mat-datepicker>
<mat-error *ngIf="tellerForm.controls.startDate.hasError('required')">
{{ 'labels.inputs.Start Date' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Start Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field (click)="endDatePicker.open()">
<mat-label>{{ 'labels.inputs.End Date' | translate }}</mat-label>
<input matInput [min]="tellerForm.value.startDate" [max]="maxDate" [matDatepicker]="endDatePicker" formControlName="endDate">
<input
matInput
[min]="tellerForm.value.startDate"
[max]="maxDate"
[matDatepicker]="endDatePicker"
formControlName="endDate"
/>
<mat-datepicker-toggle matSuffix [for]="endDatePicker"></mat-datepicker-toggle>
<mat-datepicker #endDatePicker></mat-datepicker>
</mat-form-field>
@@ -61,21 +73,21 @@
</mat-option>
</mat-select>
<mat-error *ngIf="tellerForm.controls.status.hasError('required')">
{{ 'labels.inputs.Status' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Status' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../']">{{ 'labels.buttons.Cancel' | translate }}</button>
<button mat-raised-button color="primary" [disabled]="!tellerForm.valid" *mifosxHasPermission="'CREATE_TELLER'">{{ 'labels.buttons.Submit' | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button mat-raised-button color="primary" [disabled]="!tellerForm.valid" *mifosxHasPermission="'CREATE_TELLER'">
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</form>
</mat-card>
</div>
@@ -1,21 +1,18 @@
<div class="container">
<mat-card>
<form [formGroup]="tellerForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.Teller Name' | translate }}</mat-label>
<input matInput required formControlName="name">
<input matInput required formControlName="name" />
<mat-error *ngIf="tellerForm.controls.name.hasError('required')">
{{ 'labels.inputs.Teller Name' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Teller Name' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
<mat-error *ngIf="tellerForm.controls.name.hasError('pattern')">
{{ 'labels.inputs.Teller Name' | translate }} <strong>{{'labels.commons.cannot' | translate }}</strong> {{'labels.commons.begin with a special character or number' | translate }}
{{ 'labels.inputs.Teller Name' | translate }} <strong>{{ 'labels.commons.cannot' | translate }}</strong>
{{ 'labels.commons.begin with a special character or number' | translate }}
</mat-error>
</mat-form-field>
@@ -30,23 +27,36 @@
<mat-form-field>
<mat-label>{{ 'labels.inputs.Description' | translate }}</mat-label>
<input matInput formControlName="description">
<input matInput formControlName="description" />
</mat-form-field>
<mat-form-field (click)="startDatePicker.open()">
<mat-label>{{ 'labels.inputs.Start Date' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="startDatePicker" required
formControlName="startDate">
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="startDatePicker"
required
formControlName="startDate"
/>
<mat-datepicker-toggle matSuffix [for]="startDatePicker"></mat-datepicker-toggle>
<mat-datepicker #startDatePicker></mat-datepicker>
<mat-error *ngIf="tellerForm.controls.startDate.hasError('required')">
{{ 'labels.inputs.Start Date' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Start Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field (click)="endDatePicker.open()">
<mat-label>{{ 'labels.inputs.End Date' | translate }}</mat-label>
<input matInput [min]="tellerForm.value.startDate" [max]="maxDate" [matDatepicker]="endDatePicker" formControlName="endDate">
<input
matInput
[min]="tellerForm.value.startDate"
[max]="maxDate"
[matDatepicker]="endDatePicker"
formControlName="endDate"
/>
<mat-datepicker-toggle matSuffix [for]="endDatePicker"></mat-datepicker-toggle>
<mat-datepicker #endDatePicker></mat-datepicker>
</mat-form-field>
@@ -59,22 +69,21 @@
</mat-option>
</mat-select>
<mat-error *ngIf="tellerForm.controls.status.hasError('required')">
{{ 'labels.inputs.Status' | translate }} {{'labels.commons.is' | translate }} <strong>{{'labels.commons.required' | translate }}</strong>
{{ 'labels.inputs.Status' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../']">{{ 'labels.buttons.Cancel' | translate }}</button>
<button mat-raised-button color="primary" [disabled]="!tellerForm.valid"
*mifosxHasPermission="'UPDATE_TELLER'">{{ 'labels.buttons.Submit' | translate }}</button>
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button mat-raised-button color="primary" [disabled]="!tellerForm.valid" *mifosxHasPermission="'UPDATE_TELLER'">
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</form>
</mat-card>
</div>
@@ -1,65 +1,66 @@
<div class="container m-b-20" fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px">
<button mat-raised-button color="primary" [routerLink]="['create']" *mifosxHasPermission="'CREATE_TELLER'">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Create Teller' | translate }}
</button>
</div>
<div class="container">
<div fxLayout="row" fxLayoutGap="20px">
<mat-form-field fxFlex>
<mat-label>{{'labels.inputs.Filter' | translate}}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)">
<mat-label>{{ 'labels.inputs.Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
</div>
<div class="mat-elevation-z8">
<table mat-table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="officeName">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Branch' | translate }} </th>
<td mat-cell *matCellDef="let teller"> {{ teller.officeName }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Branch' | translate }}</th>
<td mat-cell *matCellDef="let teller">{{ teller.officeName }}</td>
</ng-container>
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Teller Name' | translate }} </th>
<td mat-cell *matCellDef="let teller"> {{ teller.name }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Teller Name' | translate }}</th>
<td mat-cell *matCellDef="let teller">{{ teller.name }}</td>
</ng-container>
<ng-container matColumnDef="status">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Status' | translate }} </th>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Status' | translate }}</th>
<td mat-cell *matCellDef="let teller">
<div [className]="teller.status === 'ACTIVE' ? 'true' : 'false'">
<fa-icon matTooltip="{{ teller.status === 'ACTIVE' ? ( 'labels.inputs.Active' | translate ) : ('labels.catalogs.Inactive' | translate) }}" matTooltipPosition="right" icon="circle" size="lg"></fa-icon>
<fa-icon
matTooltip="{{
teller.status === 'ACTIVE'
? ('labels.inputs.Active' | translate)
: ('labels.catalogs.Inactive' | translate)
}}"
matTooltipPosition="right"
icon="circle"
size="lg"
></fa-icon>
</div>
</td>
</ng-container>
<ng-container matColumnDef="startDate">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'labels.inputs.Started On' | translate }} </th>
<td mat-cell *matCellDef="let teller"> {{ teller.startDate | dateFormat }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Started On' | translate }}</th>
<td mat-cell *matCellDef="let teller">{{ teller.startDate | dateFormat }}</td>
</ng-container>
<ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Actions' | translate }} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Actions' | translate }}</th>
<td mat-cell *matCellDef="let teller" (click)="$event.stopPropagation()">
<button mat-button color="primary" [routerLink]="[teller.id,'cashiers']">
<button mat-button color="primary" [routerLink]="[teller.id, 'cashiers']">
<fa-icon icon="eye" class="m-r-10"></fa-icon>{{ 'labels.buttons.View Cashiers' | translate }}
</button>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;" [routerLink]="[row.id]" class="select-row"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns" [routerLink]="[row.id]" class="select-row"></tr>
</table>
<mat-paginator [pageSizeOptions]="[10, 25, 50, 100]" showFirstLastButtons></mat-paginator>
</div>
</div>
@@ -10,13 +10,9 @@
</div>
<div class="container">
<mat-card>
<mat-card-content>
<div fxLayout="row wrap" class="content">
<div fxFlex="50%" class="mat-body-strong">
{{ 'labels.inputs.Teller Name' | translate }}
</div>
@@ -64,11 +60,7 @@
<div fxFlex="50%">
{{ tellerData.status | titlecase }}
</div>
</div>
</mat-card-content>
</mat-card>
</div>
@@ -1,17 +1,12 @@
<div class="container">
<mat-card>
<form [formGroup]="workingDaysForm" (ngSubmit)="submit()">
<mat-card-content>
<div #workingDaysFormRef fxLayout="column">
<div fxLayout="row" fxLayout.lt-md="column">
<mat-label fxFlex="50%" class="mat-h4">{{ 'labels.inputs.Working Days' | translate }}</mat-label>
<div fxFlex="50%" fxLayout="column" formArrayName="recurrence">
<div *ngFor="let day of recurrence.controls; let i = index;">
<div *ngFor="let day of recurrence.controls; let i = index">
<mat-checkbox labelPosition="after" [formControlName]="i">
{{ weekDays[i].name }}
</mat-checkbox>
@@ -22,7 +17,10 @@
<mat-form-field>
<mat-label>{{ 'labels.inputs.Payments due on non working days' | translate }}</mat-label>
<mat-select formControlName="repaymentRescheduleType">
<mat-option *ngFor="let repaymentRescheduleType of repaymentRescheduleTypeData" [value]="repaymentRescheduleType.id">
<mat-option
*ngFor="let repaymentRescheduleType of repaymentRescheduleTypeData"
[value]="repaymentRescheduleType.id"
>
{{ repaymentRescheduleType.value }}
</mat-option>
</mat-select>
@@ -31,29 +29,44 @@
<mat-checkbox labelPosition="before" formControlName="extendTermForDailyRepayments">
{{ 'labels.inputs.Loans daily repayment schedule' | translate }}
</mat-checkbox>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button mat-raised-button [routerLink]="['../']">{{ 'labels.buttons.Cancel' | translate }}</button>
<button mat-raised-button color="primary" [disabled]="workingDaysForm.pristine" *mifosxHasPermission="'UPDATE_WORKINGDAYS'">{{ 'labels.buttons.Submit' | translate }}</button>
<button
mat-raised-button
color="primary"
[disabled]="workingDaysForm.pristine"
*mifosxHasPermission="'UPDATE_WORKINGDAYS'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</form>
</mat-card>
</div>
<ng-template #templateWorkingDaysFormRef let-data let-popover="popover">
<h2>{{ 'labels.heading.Working Days' | translate }}</h2>
<p class="mw400">{{ 'labels.text.Click (Define Working Days)' | translate }}: <a href="https://mifosforge.jira.com/wiki/spaces/docs/pages/90243212/Working+Days" target="_blank">{{ 'labels.inputs.Working Days' | translate }}</a></p>
<p class="mw400">
{{ 'labels.text.Click (Define Working Days)' | translate }}:
<a href="https://mifosforge.jira.com/wiki/spaces/docs/pages/90243212/Working+Days" target="_blank">{{
'labels.inputs.Working Days' | translate
}}</a>
</p>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<button mat-raised-button color="warn" (click)="popover.close();configurationWizardService.closeConfigWizard()">{{ 'labels.buttons.Close' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close()">{{ 'labels.buttons.Define Working Days' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();previousStep()">{{ 'labels.buttons.Back' | translate }}</button>
<button mat-raised-button color="primary" (click)="popover.close();nextStep()">{{ 'labels.buttons.Next Step' | translate }}</button>
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close()">
{{ 'labels.buttons.Define Working Days' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); previousStep()">
{{ 'labels.buttons.Back' | translate }}
</button>
<button mat-raised-button color="primary" (click)="popover.close(); nextStep()">
{{ 'labels.buttons.Next Step' | translate }}
</button>
</div>
</ng-template>