refactor: loans module (#1237)

This commit is contained in:
Muskan Khedia
2020-08-30 19:50:58 +05:30
committed by GitHub
parent d357263c3e
commit 3c858e308c
83 changed files with 1480 additions and 1369 deletions
@@ -131,7 +131,7 @@
</mat-card-content> </mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px"> <mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../']">Cancel</button> <button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!makeAccountTransferForm.valid" *mifosxHasPermission="'CREATE_ACCOUNTTRANSFER'" <button mat-raised-button color="primary" [disabled]="!makeAccountTransferForm.valid" *mifosxHasPermission="'CREATE_ACCOUNTTRANSFER'"
(click)="submit()">Submit</button> (click)="submit()">Submit</button>
</mat-card-actions> </mat-card-actions>
@@ -186,7 +186,7 @@ export class MakeAccountTransfersComponent implements OnInit, AfterViewInit {
fromOfficeId: this.accountTransferTemplateData.fromClient.officeId fromOfficeId: this.accountTransferTemplateData.fromClient.officeId
}; };
this.accountTransfersService.createAccountTransfer(makeAccountTransferData).subscribe(() => { this.accountTransfersService.createAccountTransfer(makeAccountTransferData).subscribe(() => {
this.router.navigate(['../../'], { relativeTo: this.route }); this.router.navigate(['../../general'], { relativeTo: this.route });
}); });
} }
+1 -2
View File
@@ -229,8 +229,7 @@ const routes: Routes = [
] ]
}, },
{ {
path: 'loans', path: 'loans-accounts',
data: { title: extract('Loans'), breadcrumb: 'loans', routeParamBreadcrumb: false },
loadChildren: () => import('../loans/loans.module').then(m => m.LoansModule) loadChildren: () => import('../loans/loans.module').then(m => m.LoansModule)
}, },
{ {
@@ -62,7 +62,7 @@
<button mat-raised-button [matMenuTriggerFor]="Applications"> <button mat-raised-button [matMenuTriggerFor]="Applications">
<i class="fa fa-file"></i>Applications</button> <i class="fa fa-file"></i>Applications</button>
<mat-menu #Applications="matMenu"> <mat-menu #Applications="matMenu">
<button mat-menu-item [routerLink]="['loans', 'create-loans-account']">New Loan Account</button> <button mat-menu-item [routerLink]="['loans-accounts', 'create']">New Loan Account</button>
<button mat-menu-item [routerLink]="['savings-accounts', 'create']">New Savings Account</button> <button mat-menu-item [routerLink]="['savings-accounts', 'create']">New Savings Account</button>
<button mat-menu-item *mifosxHasPermission="'CREATE_SHAREACCOUNT'" [routerLink]="['shares-accounts', 'create']">New Share Account</button> <button mat-menu-item *mifosxHasPermission="'CREATE_SHAREACCOUNT'" [routerLink]="['shares-accounts', 'create']">New Share Account</button>
<button mat-menu-item *mifosxHasPermission="'CREATE_RECURRINGDEPOSITACCOUNT'" [routerLink]="['recurringdeposits', 'create-recurring-deposits-account']">New Recurring Deposit Account</button> <button mat-menu-item *mifosxHasPermission="'CREATE_RECURRINGDEPOSITACCOUNT'" [routerLink]="['recurringdeposits', 'create-recurring-deposits-account']">New Recurring Deposit Account</button>
@@ -82,7 +82,7 @@
</table> </table>
<!-- loans overview table --> <!-- loans accounts overview table -->
<div class="heading-content"> <div class="heading-content">
<div fxLayout="column" fxFlex="50%"> <div fxLayout="column" fxFlex="50%">
<div class="heading-name"> <div class="heading-name">
@@ -137,20 +137,20 @@
<th mat-header-cell *matHeaderCellDef> Actions </th> <th mat-header-cell *matHeaderCellDef> Actions </th>
<td mat-cell *matCellDef="let element"> <td mat-cell *matCellDef="let element">
<button *ngIf="element.status.active" class="account-action-button" mat-raised-button color="primary" matTooltip="Make Repayment" matTooltipPosition="above" <button *ngIf="element.status.active" class="account-action-button" mat-raised-button color="primary" matTooltip="Make Repayment" matTooltipPosition="above"
(click)="routeEdit($event)" [routerLink]="['../','loans', element.id, 'actions', 'make-repayment']"> (click)="routeEdit($event)" [routerLink]="['../','loans-accounts', element.id, 'actions', 'Make Repayment']">
<i class="fa fa-dollar"></i> <i class="fa fa-dollar"></i>
</button> </button>
<span *ngIf="element.status.pendingApproval"> <span *ngIf="element.status.pendingApproval">
<button class="account-action-button" mat-raised-button color="primary" matTooltip="Approve" <button class="account-action-button" mat-raised-button color="primary" matTooltip="Approve"
matTooltipPosition="above" *mifosxHasPermission="'APPROVE_LOAN'" (click)="routeEdit($event)" matTooltipPosition="above" *mifosxHasPermission="'APPROVE_LOAN'" (click)="routeEdit($event)"
[routerLink]="['../','loans', element.id, 'actions', 'approve']"> [routerLink]="['../','loans-accounts', element.id, 'actions', 'Approve']">
<i class="fa fa-check"></i> <i class="fa fa-check"></i>
</button> </button>
</span> </span>
<span *ngIf="!element.status.pendingApproval && !element.status.active && !element.status.overpaid"> <span *ngIf="!element.status.pendingApproval && !element.status.active && !element.status.overpaid">
<button class="account-action-button" mat-raised-button color="primary" matTooltip="Disburse" <button class="account-action-button" mat-raised-button color="primary" matTooltip="Disburse"
matTooltipPosition="above" *mifosxHasPermission="'DISBURSE_LOAN'" matTooltipPosition="above" *mifosxHasPermission="'DISBURSE_LOAN'"
(click)="routeEdit($event)" [routerLink]="['../','loans', element.id, 'actions', 'disburse']"> (click)="routeEdit($event)" [routerLink]="['../','loans-accounts', element.id, 'actions', 'Disburse']">
<i class="fa fa-flag"></i> <i class="fa fa-flag"></i>
</button> </button>
</span> </span>
@@ -166,7 +166,7 @@
<tr mat-header-row *matHeaderRowDef="openLoansColumns"></tr> <tr mat-header-row *matHeaderRowDef="openLoansColumns"></tr>
<tr mat-row *matRowDef="let row; columns: openLoansColumns;" <tr mat-row *matRowDef="let row; columns: openLoansColumns;"
[routerLink]="['../', 'loans', row.id, 'general']" class="select-row"></tr> [routerLink]="['../', 'loans-accounts', row.id, 'general']" class="select-row"></tr>
</table> </table>
@@ -215,7 +215,7 @@
<tr mat-header-row *matHeaderRowDef="closedLoansColumns"></tr> <tr mat-header-row *matHeaderRowDef="closedLoansColumns"></tr>
<tr mat-row *matRowDef="let row; columns: closedLoansColumns;" <tr mat-row *matRowDef="let row; columns: closedLoansColumns;"
[routerLink]="['../', 'loans', row.id, 'general']" class="select-row"></tr> [routerLink]="['../', 'loans-accounts', row.id, 'general']" class="select-row"></tr>
</table> </table>
@@ -148,7 +148,7 @@ export class GeneralTabComponent {
*/ */
routeTransferFund(loanId: any) { routeTransferFund(loanId: any) {
const queryParams: any = { loanId: loanId, accountType: 'fromloans' }; const queryParams: any = { loanId: loanId, accountType: 'fromloans' };
this.router.navigate(['../', 'loans', loanId, 'transfer-funds', 'make-account-transfer'], { relativeTo: this.route, queryParams: queryParams }); this.router.navigate(['../', 'loans-accounts', loanId, 'transfer-funds', 'make-account-transfer'], { relativeTo: this.route, queryParams: queryParams });
} }
} }
@@ -104,7 +104,7 @@
<ng-container matColumnDef="actions"> <ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef mat-sort-header> Actions </th> <th mat-header-cell *matHeaderCellDef mat-sort-header> Actions </th>
<td mat-cell *matCellDef="let loan; let i = index"> <td mat-cell *matCellDef="let loan; let i = index">
<button mat-raised-button color="primary" (click)="showAndStorePaymentDetails('loans', loan, i)">Add Payment</button> <button mat-raised-button color="primary" (click)="showAndStorePaymentDetails('loans-accounts', loan, i)">Add Payment</button>
</td> </td>
</ng-container> </ng-container>
+1 -2
View File
@@ -134,8 +134,7 @@ const routes: Routes = [
} }
}, },
{ {
path: 'loans', path: 'loans-accounts',
data: { title: extract('Loans'), breadcrumb: 'loans', routeParamBreadcrumb: false },
loadChildren: () => import('../loans/loans.module').then(m => m.LoansModule) loadChildren: () => import('../loans/loans.module').then(m => m.LoansModule)
}, },
{ {
@@ -136,7 +136,7 @@
</ng-container> </ng-container>
<tr mat-header-row *matHeaderRowDef="openLoansColumns"></tr> <tr mat-header-row *matHeaderRowDef="openLoansColumns"></tr>
<tr mat-row *matRowDef="let row; columns: openLoansColumns;" [routerLink]="['../', 'loans', row.id, 'general']"></tr> <tr mat-row *matRowDef="let row; columns: openLoansColumns;" [routerLink]="['../', 'loans-accounts', row.id, 'general']"></tr>
</table> </table>
@@ -187,7 +187,7 @@
</ng-container> </ng-container>
<tr mat-header-row *matHeaderRowDef="closedLoansColumns"></tr> <tr mat-header-row *matHeaderRowDef="closedLoansColumns"></tr>
<tr mat-row *matRowDef="let row; columns: closedLoansColumns;" [routerLink]="['../', 'loans', row.id, 'general']"></tr> <tr mat-row *matRowDef="let row; columns: closedLoansColumns;" [routerLink]="['../', 'loans-accounts', row.id, 'general']"></tr>
</table> </table>
@@ -26,39 +26,39 @@ export class LoanActionButtonResolver implements Resolve<Object> {
resolve(route: ActivatedRouteSnapshot): Observable<any> { resolve(route: ActivatedRouteSnapshot): Observable<any> {
const loanId = route.parent.paramMap.get('loanId'); const loanId = route.parent.paramMap.get('loanId');
const loanActionButton = route.paramMap.get('action'); const loanActionButton = route.paramMap.get('action');
if (loanActionButton === 'assign-loan-officer' || loanActionButton === 'change-loan-officer') { if (loanActionButton === 'Assign Loan Officer' || loanActionButton === 'Change Loan Officer') {
return this.loansService.getLoanTemplate(loanId); return this.loansService.getLoanTemplate(loanId);
// } else if (loanActionButton === 'make-repayment') { // } else if (loanActionButton === 'make-repayment') {
// return this.loansService.getLoanActionTemplate(loanId, 'repayment'); // return this.loansService.getLoanActionTemplate(loanId, 'repayment');
} else if (loanActionButton === 'waive-interest') { } else if (loanActionButton === 'Waive Interest') {
return this.loansService.getLoanActionTemplate(loanId, 'waiveinterest'); return this.loansService.getLoanActionTemplate(loanId, 'waiveinterest');
} else if (loanActionButton === 'write-off') { } else if (loanActionButton === 'Write Off') {
return this.loansService.getLoanActionTemplate(loanId, 'writeoff'); return this.loansService.getLoanActionTemplate(loanId, 'writeoff');
} else if (loanActionButton === 'close') { } else if (loanActionButton === 'Close') {
return this.loansService.getLoanActionTemplate(loanId, 'close'); return this.loansService.getLoanActionTemplate(loanId, 'close');
} else if (loanActionButton === 'close-as-rescheduled') { } else if (loanActionButton === 'Close (as Rescheduled)') {
return this.loansService.getLoanActionTemplate(loanId, 'close-rescheduled'); return this.loansService.getLoanActionTemplate(loanId, 'close-rescheduled');
} else if (loanActionButton === 'reschedule') { } else if (loanActionButton === 'Reschedule') {
return this.loansService.rescheduleLoanTemplate(); return this.loansService.rescheduleLoanTemplate();
} else if (loanActionButton === 'prepay-loan') { } else if (loanActionButton === 'Prepay Loan') {
return this.loansService.getLoanActionTemplate(loanId, 'prepayLoan'); return this.loansService.getLoanActionTemplate(loanId, 'prepayLoan');
} else if (loanActionButton === 'add-collateral') { } else if (loanActionButton === 'Add Collateral') {
return this.loansService.getLoanCollateralTemplate(loanId); return this.loansService.getLoanCollateralTemplate(loanId);
} else if (loanActionButton === 'disburse-to-savings') { } else if (loanActionButton === 'Disburse to Savings') {
return this.loansService.getLoanActionTemplate(loanId, 'disburseToSavings'); return this.loansService.getLoanActionTemplate(loanId, 'disburseToSavings');
} else if (loanActionButton === 'recovery-payment') { } else if (loanActionButton === 'Recovery Payment') {
return this.loansService.getLoanActionTemplate(loanId, 'recoverypayment'); return this.loansService.getLoanActionTemplate(loanId, 'recoverypayment');
} else if (loanActionButton === 'view-guarantors') { } else if (loanActionButton === 'View Guarantors') {
return this.loansService.getLoanAccountResource(loanId, 'guarantors'); return this.loansService.getLoanAccountResource(loanId, 'guarantors');
} else if (loanActionButton === 'create-guarantor') { } else if (loanActionButton === 'Create Guarantor') {
return this.loansService.getGuarantorTemplate(loanId); return this.loansService.getGuarantorTemplate(loanId);
} else if (loanActionButton === 'disburse') { } else if (loanActionButton === 'Disburse') {
return this.loansService.getLoanActionTemplate(loanId, 'disburse'); return this.loansService.getLoanActionTemplate(loanId, 'disburse');
} else if (loanActionButton === 'loan-screen-reports') { } else if (loanActionButton === 'Loan Screen Reports') {
return this.loansService.getLoanScreenReportsData(); return this.loansService.getLoanScreenReportsData();
} else if (loanActionButton === 'approve') { } else if (loanActionButton === 'Approve') {
return this.loansService.getLoanApprovalTemplate(loanId); return this.loansService.getLoanApprovalTemplate(loanId);
} else if (loanActionButton === 'add-loan-charge') { } else if (loanActionButton === 'Add Loan Charge') {
return this.loansService.getLoanChargeTemplateResource(loanId); return this.loansService.getLoanChargeTemplateResource(loanId);
} else { } else {
return undefined; return undefined;
@@ -24,7 +24,7 @@ export class LoanDetailsResolver implements Resolve<Object> {
* @returns {Observable<any>} * @returns {Observable<any>}
*/ */
resolve(route: ActivatedRouteSnapshot): Observable<any> { resolve(route: ActivatedRouteSnapshot): Observable<any> {
const loanId = route.paramMap.get('loanId') || route.parent.paramMap.get('loanId'); const loanId = route.paramMap.get('loanId') || route.parent.paramMap.get('loanId') || route.parent.parent.paramMap.get('loanId');
return this.loansService.getLoanAccountAssociationDetails(loanId); return this.loansService.getLoanAccountAssociationDetails(loanId);
} }
@@ -1,8 +0,0 @@
<h1 mat-dialog-title>{{data.heading}}</h1>
<div mat-dialog-content>
<p>{{ data.dialogContext }}</p>
</div>
<mat-dialog-actions align="end">
<button mat-raised-button mat-dialog-close>Cancel</button>
<button mat-raised-button color="warn" [mat-dialog-close]="{ confirm: true }">Confirm</button>
</mat-dialog-actions>
@@ -1,25 +0,0 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { LoansConfirmationDialogBoxComponent } from './loans-confirmation-dialog-box.component';
describe('LoansConfirmationDialogBoxComponent', () => {
let component: LoansConfirmationDialogBoxComponent;
let fixture: ComponentFixture<LoansConfirmationDialogBoxComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ LoansConfirmationDialogBoxComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(LoansConfirmationDialogBoxComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
@@ -1,22 +0,0 @@
import { Component, OnInit, Inject } from '@angular/core';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { DeleteDialogComponent } from 'app/shared/delete-dialog/delete-dialog.component';
@Component({
selector: 'mifosx-loans-confirmation-dialog-box',
templateUrl: './loans-confirmation-dialog-box.component.html',
styleUrls: ['./loans-confirmation-dialog-box.component.scss']
})
export class LoansConfirmationDialogBoxComponent implements OnInit {
/**
* @param {MatDialogRef} dialogRef Component reference to dialog.
* @param {any} data Provides a confirmation for all the loans account actions.
*/
constructor(public dialogRef: MatDialogRef<LoansConfirmationDialogBoxComponent>,
@Inject(MAT_DIALOG_DATA) public data: any) { }
ngOnInit() {
}
}
+73 -79
View File
@@ -33,7 +33,6 @@ import { ExportTransactionsComponent } from './loans-view/transactions/export-tr
/** Custom Resolvers */ /** Custom Resolvers */
import { LoanDetailsResolver } from './common-resolvers/loan-details.resolver'; import { LoanDetailsResolver } from './common-resolvers/loan-details.resolver';
import { LoanNotesResolver } from './common-resolvers/loan-notes.resolver'; import { LoanNotesResolver } from './common-resolvers/loan-notes.resolver';
import { LoanDetailsChargesResolver } from './common-resolvers/loan-details-charges.resolver';
import { LoanDatatablesResolver } from './common-resolvers/loan-datatables.resolver'; import { LoanDatatablesResolver } from './common-resolvers/loan-datatables.resolver';
import { LoanDatatableResolver } from './common-resolvers/loan-datatable.resolver'; import { LoanDatatableResolver } from './common-resolvers/loan-datatable.resolver';
import { LoanActionButtonResolver } from './common-resolvers/loan-action-button.resolver'; import { LoanActionButtonResolver } from './common-resolvers/loan-action-button.resolver';
@@ -49,10 +48,10 @@ import { LoansAccountTransactionTemplateResolver } from './common-resolvers/loan
const routes: Routes = [ const routes: Routes = [
{ {
path: '', path: '',
// Component to View All existing Loans Comes Here data: { title: extract('Loans'), breadcrumb: 'Loans', routeParamBreadcrumb: false },
children: [ children: [
{ {
path: 'create-loans-account', path: 'create',
data: { title: extract('Create Loans Account'), breadcrumb: 'Create Loans Account' }, data: { title: extract('Create Loans Account'), breadcrumb: 'Create Loans Account' },
component: CreateLoansAccountComponent, component: CreateLoansAccountComponent,
resolve: { resolve: {
@@ -62,7 +61,6 @@ const routes: Routes = [
{ {
path: ':loanId', path: ':loanId',
data: { title: extract('Loan View'), routeParamBreadcrumb: 'loanId' }, data: { title: extract('Loan View'), routeParamBreadcrumb: 'loanId' },
// Component For Loan View Comes Here
children: [ children: [
{ {
path: '', path: '',
@@ -86,24 +84,15 @@ const routes: Routes = [
path: 'original-schedule', path: 'original-schedule',
component: OriginalScheduleTabComponent, component: OriginalScheduleTabComponent,
data: { title: extract('Original Schedule'), breadcrumb: 'Original Schedule', routeParamBreadcrumb: false }, data: { title: extract('Original Schedule'), breadcrumb: 'Original Schedule', routeParamBreadcrumb: false },
resolve: {
loanDetailsAssociationData: LoanDetailsChargesResolver
}
}, },
{ {
path: 'repayment-schedule', path: 'repayment-schedule',
component: RepaymentScheduleTabComponent, component: RepaymentScheduleTabComponent,
data: { title: extract('Repayment Schedule'), breadcrumb: 'Repayment Schedule', routeParamBreadcrumb: false }, data: { title: extract('Repayment Schedule'), breadcrumb: 'Repayment Schedule', routeParamBreadcrumb: false },
resolve: {
loanDetailsAssociationData: LoanDetailsChargesResolver
}
}, },
{ {
path: 'transactions', path: 'transactions',
data: { title: extract('Loans Account Transactions'), breadcrumb: 'Transactions', routeParamBreadcrumb: false }, data: { title: extract('Loans Account Transactions'), breadcrumb: 'Transactions', routeParamBreadcrumb: false },
resolve: {
loanDetailsAssociationData: LoanDetailsChargesResolver
},
children: [ children: [
{ {
path: '', path: '',
@@ -113,35 +102,6 @@ const routes: Routes = [
{ {
path: 'export', path: 'export',
component: ExportTransactionsComponent component: ExportTransactionsComponent
},
{
path: ':id',
data: { routeParamBreadcrumb: 'id' },
children: [
{
path: '',
component: ViewTransactionComponent,
resolve: {
loansAccountTransaction: LoansAccountTransactionResolver
}
},
{
path: 'edit',
component: EditTransactionComponent,
data: { breadcrumb: 'Edit', routeParamBreadcrumb: false },
resolve: {
loansAccountTransactionTemplate: LoansAccountTransactionTemplateResolver
}
},
{
path: 'reciept',
component: ViewRecieptComponent,
data: { breadcrumb: 'Reciept', routeParamBreadcrumb: false },
resolve: {
loansTransactionReciept: LoansTransactionRecieptResolver
}
}
]
} }
] ]
}, },
@@ -149,17 +109,11 @@ const routes: Routes = [
path: 'loan-collateral', path: 'loan-collateral',
component: LoanCollateralTabComponent, component: LoanCollateralTabComponent,
data: { title: extract('Loan Collateral Details'), breadcrumb: 'Loan Collateral Details', routeParamBreadcrumb: false }, data: { title: extract('Loan Collateral Details'), breadcrumb: 'Loan Collateral Details', routeParamBreadcrumb: false },
resolve: {
loanDetailsAssociationData: LoanDetailsChargesResolver
}
}, },
{ {
path: 'loan-tranche-details', path: 'loan-tranche-details',
component: LoanTrancheDetailsComponent, component: LoanTrancheDetailsComponent,
data: { title: extract('Loan Tranche Details'), breadcrumb: 'Loan Tranche Details', routeParamBreadcrumb: false }, data: { title: extract('Loan Tranche Details'), breadcrumb: 'Loan Tranche Details', routeParamBreadcrumb: false },
resolve: {
loanDetailsAssociationData: LoanDetailsChargesResolver
}
}, },
{ {
path: 'overdue-charges', path: 'overdue-charges',
@@ -170,38 +124,18 @@ const routes: Routes = [
path: 'floating-interest-rates', path: 'floating-interest-rates',
component: FloatingInterestRatesComponent, component: FloatingInterestRatesComponent,
data: { title: extract('Floating Interest Rates'), breadcrumb: 'Floating Interest Rates', routeParamBreadcrumb: false }, data: { title: extract('Floating Interest Rates'), breadcrumb: 'Floating Interest Rates', routeParamBreadcrumb: false },
resolve: {
loanDetailsAssociationData: LoanDetailsChargesResolver
}
}, },
{ {
path: 'charges', path: 'charges',
data: { title: extract('Loans Account Charges'), breadcrumb: 'Charges', routeParamBreadcrumb: false }, data: { title: extract('Loans Account Charges'), breadcrumb: 'Charges', routeParamBreadcrumb: false },
children: [ component: ChargesTabComponent,
{
path: '',
component: ChargesTabComponent,
resolve: {
loanDetailsAssociationData: LoanDetailsChargesResolver
}
},
{
path: ':id',
data: { routeParamBreadcrumb: 'id' },
component: ViewChargeComponent,
resolve: {
loansAccountCharge: LoansAccountChargeResolver
}
}
]
}, },
{ {
path: 'loan-documents', path: 'loan-documents',
component: LoanDocumentsTabComponent, component: LoanDocumentsTabComponent,
data: { title: extract('Loan Documents'), breadcrumb: 'Loan Documents', routeParamBreadcrumb: false }, data: { title: extract('Loan Documents'), breadcrumb: 'Loan Documents', routeParamBreadcrumb: false },
resolve: { resolve: {
loanDocuments: LoanDocumentsResolver, loanDocuments: LoanDocumentsResolver
loanDetailsData: LoanDetailsResolver
}, },
}, },
{ {
@@ -228,20 +162,81 @@ const routes: Routes = [
} }
}] }]
}, },
],
},
{
path: 'transactions',
data: { title: extract('Loans Account Transactions'), breadcrumb: 'Transactions', routeParamBreadcrumb: false },
resolve: {
loanDetailsAssociationData: LoanDetailsResolver
},
children: [
{ {
path: 'actions/:action', path: '',
component: LoanAccountActionsComponent, redirectTo: '../transactions', pathMatch: 'prefix'
data: { title: extract('Loan Account Actions'), routeParamBreadcrumb: 'action' },
resolve: {
actionButtonData: LoanActionButtonResolver
}
}, },
{ {
path: 'transfer-funds', path: ':id',
loadChildren: () => import('../account-transfers/account-transfers.module').then(m => m.AccountTransfersModule) data: { routeParamBreadcrumb: 'id' },
children: [
{
path: '',
component: ViewTransactionComponent,
resolve: {
loansAccountTransaction: LoansAccountTransactionResolver
}
},
{
path: 'edit',
component: EditTransactionComponent,
data: { breadcrumb: 'Edit', routeParamBreadcrumb: false },
resolve: {
loansAccountTransactionTemplate: LoansAccountTransactionTemplateResolver
}
},
{
path: 'reciept',
component: ViewRecieptComponent,
data: { breadcrumb: 'Reciept', routeParamBreadcrumb: false },
resolve: {
loansTransactionReciept: LoansTransactionRecieptResolver
}
}
]
} }
] ]
}, },
{
path: 'charges',
data: { title: extract('Loans Account Charges'), breadcrumb: 'Charges', routeParamBreadcrumb: false },
children: [
{
path: '',
redirectTo: '../charges', pathMatch: 'prefix'
},
{
path: ':id',
data: { routeParamBreadcrumb: 'id' },
component: ViewChargeComponent,
resolve: {
loansAccountCharge: LoansAccountChargeResolver,
loanDetailsData: LoanDetailsResolver
}
}
]
},
{
path: 'actions/:action',
component: LoanAccountActionsComponent,
data: { title: extract('Loan Account Actions'), routeParamBreadcrumb: 'action' },
resolve: {
actionButtonData: LoanActionButtonResolver
}
},
{
path: 'transfer-funds',
loadChildren: () => import('../account-transfers/account-transfers.module').then(m => m.AccountTransfersModule)
},
{ {
path: 'edit-loans-account', path: 'edit-loans-account',
data: { title: extract('Edit Loans Account'), breadcrumb: 'Edit Loans Account', routeParamBreadcrumb: 'Edit' }, data: { title: extract('Edit Loans Account'), breadcrumb: 'Edit Loans Account', routeParamBreadcrumb: 'Edit' },
@@ -261,7 +256,6 @@ const routes: Routes = [
providers: [ providers: [
LoanDetailsResolver, LoanDetailsResolver,
LoanNotesResolver, LoanNotesResolver,
LoanDetailsChargesResolver,
LoanDatatablesResolver, LoanDatatablesResolver,
LoanDatatableResolver, LoanDatatableResolver,
LoanActionButtonResolver, LoanActionButtonResolver,
@@ -52,8 +52,8 @@ export class ChargesTabComponent implements OnInit {
private datePipe: DatePipe, private datePipe: DatePipe,
private router: Router, private router: Router,
public dialog: MatDialog) { public dialog: MatDialog) {
this.route.data.subscribe(( data: { loanDetailsAssociationData: any }) => { this.route.parent.data.subscribe(( data: { loanDetailsData: any }) => {
this.loanDetails = data.loanDetailsAssociationData; this.loanDetails = data.loanDetailsData;
}); });
} }
@@ -206,7 +206,7 @@ export class ChargesTabComponent implements OnInit {
private reload() { private reload() {
const clientId = this.loanDetails.clientId; const clientId = this.loanDetails.clientId;
const url: string = this.router.url; const url: string = this.router.url;
this.router.navigateByUrl(`/clients/${clientId}/loans`, { skipLocationChange: true }) this.router.navigateByUrl(`/clients/${clientId}/loans-accounts`, { skipLocationChange: true })
.then(() => this.router.navigate([url])); .then(() => this.router.navigate([url]));
} }
@@ -20,8 +20,8 @@ export class FloatingInterestRatesComponent implements OnInit {
* @param {ActivatedRoute} route Activated Route. * @param {ActivatedRoute} route Activated Route.
*/ */
constructor(private route: ActivatedRoute) { constructor(private route: ActivatedRoute) {
this.route.data.subscribe(( data: { loanDetailsAssociationData: any }) => { this.route.parent.data.subscribe(( data: { loanDetailsData: any }) => {
this.loanDetails = data.loanDetailsAssociationData; this.loanDetails = data.loanDetailsData;
}); });
} }
@@ -1,44 +1,50 @@
<div class="container"> <div class="container">
<form [formGroup]="collateralForm" (ngSubmit)="submit()"> <mat-card>
<mat-card-content> <form [formGroup]="collateralForm" (ngSubmit)="submit()">
<div fxLayout="column"> <mat-card-content>
<mat-form-field> <div fxLayout="column">
<mat-label>Collateral Type</mat-label>
<mat-select required formControlName="collateralTypeId">
<mat-option *ngFor="let collateral of dataObject.allowedCollateralTypes" [value]="collateral.id"> {{ collateral.name }}</mat-option>
</mat-select>
<mat-error *ngIf="collateralForm.controls.collateralTypeId.hasError('required')">
Collateral type <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Value</mat-label> <mat-label>Collateral Type</mat-label>
<input matInput required formControlName="value"> <mat-select required formControlName="collateralTypeId">
<mat-error *ngIf="collateralForm.controls.value.hasError('required')"> <mat-option *ngFor="let collateral of dataObject.allowedCollateralTypes" [value]="collateral.id">
Value is <strong>required</strong> {{ collateral.name }}</mat-option>
</mat-error> </mat-select>
</mat-form-field> <mat-error *ngIf="collateralForm.controls.collateralTypeId.hasError('required')">
Collateral type <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Description</mat-label> <mat-label>Value</mat-label>
<textarea matInput formControlName="description"></textarea> <input matInput required formControlName="value">
</mat-form-field> <mat-error *ngIf="collateralForm.controls.value.hasError('required')">
Value is <strong>required</strong>
</mat-error>
</mat-form-field>
</div> <mat-form-field>
<mat-label>Description</mat-label>
<textarea matInput formControlName="description"></textarea>
</mat-form-field>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!collateralForm.valid" *mifosxHasPermission="'CREATE_COLLATERAL'">Submit</button>
</mat-card-actions>
</mat-card-content> </div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!collateralForm.valid"
*mifosxHasPermission="'CREATE_COLLATERAL'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</form>
</div> </div>
@@ -1,55 +1,65 @@
<form [formGroup]="loanChargeForm" (ngSubmit)="submit()"> <div class="container">
<mat-card-content> <mat-card>
<div fxLayout="column"> <form [formGroup]="loanChargeForm" (ngSubmit)="submit()">
<mat-form-field>
<mat-label>Charge</mat-label>
<mat-select required formControlName="chargeId">
<mat-option *ngFor="let loanCharge of loanChargeOptions" [value]="loanCharge.id">
{{ loanCharge.name + ' (' + loanCharge?.currency.name + ')' }}
</mat-option>
</mat-select>
<mat-error *ngIf="loanChargeForm.controls.chargeId.hasError('required')">
Charge is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-card-content>
<mat-label>Amount</mat-label>
<input type=number required matInput formControlName="amount" />
<mat-error *ngIf="loanChargeForm.controls.amount.hasError('required')">
Amount is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <div fxLayout="column">
<mat-label>Charge Calculation</mat-label> <mat-form-field>
<input matInput formControlName="chargeCalculation" /> <mat-label>Charge</mat-label>
</mat-form-field> <mat-select required formControlName="chargeId">
<mat-option *ngFor="let loanCharge of loanChargeOptions" [value]="loanCharge.id">
{{ loanCharge.name + ' (' + loanCharge?.currency.name + ')' }}
</mat-option>
</mat-select>
<mat-error *ngIf="loanChargeForm.controls.chargeId.hasError('required')">
Charge is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Charge Time</mat-label> <mat-label>Amount</mat-label>
<input matInput formControlName="chargeTime" /> <input type=number required matInput formControlName="amount" />
</mat-form-field> <mat-error *ngIf="loanChargeForm.controls.amount.hasError('required')">
Amount is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field *ngIf="loanChargeForm.controls['dueDate']"> <mat-form-field>
<mat-label>Due On</mat-label> <mat-label>Charge Calculation</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="dueDatePicker" required <input matInput formControlName="chargeCalculation" />
formControlName="dueDate"> </mat-form-field>
<mat-datepicker-toggle matSuffix [for]="dueDatePicker"></mat-datepicker-toggle>
<mat-datepicker #dueDatePicker></mat-datepicker>
<mat-error *ngIf="loanChargeForm.controls.dueDate.hasError('required')">
Due Date is <strong>required</strong>
</mat-error>
</mat-form-field>
</div> <mat-form-field>
<mat-label>Charge Time</mat-label>
<input matInput formControlName="chargeTime" />
</mat-form-field>
<mat-card-actions fxLayoutGap="5px" fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center"> <mat-form-field *ngIf="loanChargeForm.controls['dueDate']">
<button type="button" mat-raised-button [routerLink]="['../../']">Cancel</button> <mat-label>Due On</mat-label>
<button mat-raised-button color="primary" [disabled]="!loanChargeForm.valid" *mifosxHasPermission="'CREATE_LOANCHARGE'">Submit</button> <input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="dueDatePicker" required
</mat-card-actions> formControlName="dueDate">
<mat-datepicker-toggle matSuffix [for]="dueDatePicker"></mat-datepicker-toggle>
<mat-datepicker #dueDatePicker></mat-datepicker>
<mat-error *ngIf="loanChargeForm.controls.dueDate.hasError('required')">
Due Date is <strong>required</strong>
</mat-error>
</mat-form-field>
</mat-card-content> </div>
</form>
<mat-card-actions fxLayoutGap="5px" fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!loanChargeForm.valid"
*mifosxHasPermission="'CREATE_LOANCHARGE'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
@@ -0,0 +1,3 @@
.container {
max-width: 37rem;
}
@@ -105,7 +105,7 @@ export class AddLoanChargeComponent implements OnInit {
loanCharge.locale = 'en'; loanCharge.locale = 'en';
loanCharge.dateFormat = dateFormat; loanCharge.dateFormat = dateFormat;
this.loansService.createLoanCharge(this.loanId, 'charges', loanCharge).subscribe(res => { this.loansService.createLoanCharge(this.loanId, 'charges', loanCharge).subscribe(res => {
this.router.navigate(['../../'], { relativeTo: this.route }); this.router.navigate(['../../general'], { relativeTo: this.route });
}); });
} }
} }
@@ -1,58 +1,62 @@
<div class="container"> <div class="container">
<form [formGroup]="approveLoanForm" (ngSubmit)="submit()"> <mat-card>
<mat-card-content> <form [formGroup]="approveLoanForm" (ngSubmit)="submit()">
<div fxLayout="column"> <mat-card-content>
<mat-form-field> <div fxLayout="column">
<mat-label>Approved On</mat-label>
<input matInput [min]="minDate" [matDatepicker]="approvedDatePicker" required
formControlName="approvedOnDate">
<mat-datepicker-toggle matSuffix [for]="approvedDatePicker"></mat-datepicker-toggle>
<mat-datepicker #approvedDatePicker></mat-datepicker>
<mat-error *ngIf="approveLoanForm.controls.approvedOnDate.hasError('required')">
Approved Date <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Expected disbursement on</mat-label> <mat-label>Approved On</mat-label>
<input matInput [min]="minDate" [matDatepicker]="disbursementDatePicker" <input matInput [min]="minDate" [matDatepicker]="approvedDatePicker" required
formControlName="expectedDisbursementDate"> formControlName="approvedOnDate">
<mat-datepicker-toggle matSuffix [for]="disbursementDatePicker"></mat-datepicker-toggle> <mat-datepicker-toggle matSuffix [for]="approvedDatePicker"></mat-datepicker-toggle>
<mat-datepicker #disbursementDatePicker></mat-datepicker> <mat-datepicker #approvedDatePicker></mat-datepicker>
</mat-form-field> <mat-error *ngIf="approveLoanForm.controls.approvedOnDate.hasError('required')">
Approved Date <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Approved Amount</mat-label> <mat-label>Expected disbursement on</mat-label>
<input matInput type="number" formControlName="approvedLoanAmount"> <input matInput [min]="minDate" [matDatepicker]="disbursementDatePicker"
</mat-form-field> formControlName="expectedDisbursementDate">
<mat-datepicker-toggle matSuffix [for]="disbursementDatePicker"></mat-datepicker-toggle>
<mat-datepicker #disbursementDatePicker></mat-datepicker>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Transaction Amount</mat-label> <mat-label>Approved Amount</mat-label>
<input matInput type="number" required formControlName="approvedLoanAmount" required> <input matInput type="number" formControlName="approvedLoanAmount">
<mat-error *ngIf="approveLoanForm.controls.approvedLoanAmount.hasError('required')"> </mat-form-field>
Transaction Amount is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Note</mat-label> <mat-label>Transaction Amount</mat-label>
<textarea matInput formControlName="note"></textarea> <input matInput type="number" required formControlName="approvedLoanAmount" required>
</mat-form-field> <mat-error *ngIf="approveLoanForm.controls.approvedLoanAmount.hasError('required')">
Transaction Amount is <strong>required</strong>
</mat-error>
</mat-form-field>
</div> <mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
</mat-form-field>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px"> </div>
<button type="button" mat-raised-button [routerLink]="['../../']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!approveLoanForm.valid"
*mifosxHasPermission="'APPROVE_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content> <mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!approveLoanForm.valid"
*mifosxHasPermission="'APPROVE_LOAN'">Submit</button>
</mat-card-actions>
</form> </mat-card-content>
</form>
</mat-card>
</div> </div>
@@ -88,7 +88,7 @@ export class ApproveLoanComponent implements OnInit {
local local
}; };
this.loanService.loanActionButtons(this.loanId, 'approve', approveLoanFormData).subscribe((response: any) => { this.loanService.loanActionButtons(this.loanId, 'approve', approveLoanFormData).subscribe((response: any) => {
this.router.navigate(['../../'], { relativeTo: this.route }); this.router.navigate(['../../general'], { relativeTo: this.route });
}); });
} }
@@ -1,42 +1,48 @@
<div class="container"> <div class="container">
<form [formGroup]="assignOfficerForm" (ngSubmit)="submit()"> <mat-card>
<mat-card-content> <form [formGroup]="assignOfficerForm" (ngSubmit)="submit()">
<div fxLayout="column"> <mat-card-content>
<mat-form-field> <div fxLayout="column">
<mat-label> To Loan Officer</mat-label>
<mat-select required formControlName="toLoanOfficerId">
<mat-option *ngFor="let loanOfficer of loanOfficers" [value]="loanOfficer.id">
{{ loanOfficer.displayName }}
</mat-option>
</mat-select>
<mat-error *ngIf="assignOfficerForm.controls.toLoanOfficerId.hasError('required')">
Loan Officer is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Assignment Date</mat-label> <mat-label> To Loan Officer</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="assignOnDatePicker" required formControlName="assignmentDate"> <mat-select required formControlName="toLoanOfficerId">
<mat-datepicker-toggle matSuffix [for]="assignOnDatePicker"></mat-datepicker-toggle> <mat-option *ngFor="let loanOfficer of loanOfficers" [value]="loanOfficer.id">
<mat-datepicker #assignOnDatePicker></mat-datepicker> {{ loanOfficer.displayName }}
<mat-error *ngIf="assignOfficerForm.controls.assignmentDate.hasError('required')"> </mat-option>
Assignment Date <strong>is required</strong> </mat-select>
</mat-error> <mat-error *ngIf="assignOfficerForm.controls.toLoanOfficerId.hasError('required')">
</mat-form-field> Loan Officer is <strong>required</strong>
</mat-error>
</mat-form-field>
</div> <mat-form-field>
<mat-label>Assignment Date</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="assignOnDatePicker" required
formControlName="assignmentDate">
<mat-datepicker-toggle matSuffix [for]="assignOnDatePicker"></mat-datepicker-toggle>
<mat-datepicker #assignOnDatePicker></mat-datepicker>
<mat-error *ngIf="assignOfficerForm.controls.assignmentDate.hasError('required')">
Assignment Date <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px"> </div>
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!assignOfficerForm.valid" *mifosxHasPermission="'BULKREASSIGN_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content> <mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!assignOfficerForm.valid"
*mifosxHasPermission="'BULKREASSIGN_LOAN'">Submit</button>
</mat-card-actions>
</form> </mat-card-content>
</form>
</mat-card>
</div> </div>
@@ -0,0 +1,3 @@
.container {
max-width: 37rem;
}
@@ -68,7 +68,7 @@ export class AssignLoanOfficerComponent implements OnInit {
this.loanService.loanActionButtons(this.loanId, 'assignLoanOfficer', assignForm) this.loanService.loanActionButtons(this.loanId, 'assignLoanOfficer', assignForm)
.subscribe((response: any) => { .subscribe((response: any) => {
this.router.navigate([`../../${this.loanId}/general`], { relativeTo: this.route }); this.router.navigate([`../../general`], { relativeTo: this.route });
}); });
} }
@@ -1,35 +1,41 @@
<div class="container"> <div class="container">
<form [formGroup]="closeLoanForm" (ngSubmit)="submit()"> <mat-card>
<mat-card-content> <form [formGroup]="closeLoanForm" (ngSubmit)="submit()">
<div fxLayout="column"> <mat-card-content>
<mat-form-field> <div fxLayout="column">
<mat-label>Closed On</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="closedDatePicker" required formControlName="transactionDate">
<mat-datepicker-toggle matSuffix [for]="closedDatePicker"></mat-datepicker-toggle>
<mat-datepicker #closedDatePicker></mat-datepicker>
<mat-error *ngIf="closeLoanForm.controls.transactionDate.hasError('required')">
Closed Date <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Note</mat-label> <mat-label>Closed On</mat-label>
<textarea matInput formControlName="note"></textarea> <input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="closedDatePicker" required
</mat-form-field> formControlName="transactionDate">
<mat-datepicker-toggle matSuffix [for]="closedDatePicker"></mat-datepicker-toggle>
<mat-datepicker #closedDatePicker></mat-datepicker>
<mat-error *ngIf="closeLoanForm.controls.transactionDate.hasError('required')">
Closed Date <strong>is required</strong>
</mat-error>
</mat-form-field>
</div> <mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
</mat-form-field>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px"> </div>
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!closeLoanForm.valid" *mifosxHasPermission="'CLOSEASRESCHEDULED_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content> <mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!closeLoanForm.valid"
*mifosxHasPermission="'CLOSEASRESCHEDULED_LOAN'">Submit</button>
</mat-card-actions>
</form> </mat-card-content>
</form>
</mat-card>
</div> </div>
@@ -0,0 +1,3 @@
.container {
max-width: 37rem;
}
@@ -1,156 +1,161 @@
<div class="container"> <div class="container">
<form [formGroup]="newGuarantorForm" (ngSubmit)="submit()">
<mat-card-content> <mat-card>
<div fxLayout="column"> <form [formGroup]="newGuarantorForm" (ngSubmit)="submit()">
<mat-checkbox labelPosition="before" formControlName="existingClient"> <mat-card-content>
Existing Client
</mat-checkbox>
<ng-container *ngIf="!showClientDetailsForm"> <div fxLayout="column">
<mat-form-field fxFlex="30%"> <mat-checkbox labelPosition="before" formControlName="existingClient">
<mat-label>Name</mat-label> Existing Client
<input matInput formControlName="name" [matAutocomplete]="clientsAutocomplete"> </mat-checkbox>
<mat-error *ngIf="newGuarantorForm.controls.name.hasError('required')">
Name <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-autocomplete autoActiveFirstOption #clientsAutocomplete="matAutocomplete" [displayWith]="displayClient" <ng-container *ngIf="!showClientDetailsForm">
(optionSelected)='clientSelected($event.option.value)'>
<mat-option *ngFor="let client of clientsData" [value]="client">
{{ client.displayName }}
</mat-option>
</mat-autocomplete>
<mat-form-field> <mat-form-field fxFlex="30%">
<mat-label>Relationship</mat-label> <mat-label>Name</mat-label>
<mat-select formControlName="clientRelationshipTypeId"> <input matInput formControlName="name" [matAutocomplete]="clientsAutocomplete">
<mat-option *ngFor="let relationType of relationTypes" [value]="relationType.id"> <mat-error *ngIf="newGuarantorForm.controls.name.hasError('required')">
{{ relationType.name }} Name <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-autocomplete autoActiveFirstOption #clientsAutocomplete="matAutocomplete" [displayWith]="displayClient"
(optionSelected)='clientSelected($event.option.value)'>
<mat-option *ngFor="let client of clientsData" [value]="client">
{{ client.displayName }}
</mat-option> </mat-option>
</mat-select> </mat-autocomplete>
</mat-form-field>
<ng-container *ngIf="accountOptions.length > 0">
<mat-form-field> <mat-form-field>
<mat-label>Account</mat-label> <mat-label>Relationship</mat-label>
<mat-select formControlName="savingsId"> <mat-select formControlName="clientRelationshipTypeId">
<mat-option *ngFor="let accountOption of accountOptions" [value]="accountOption.id"> <mat-option *ngFor="let relationType of relationTypes" [value]="relationType.id">
{{ accountOption.productName }} - {{ accountOption.accountNo }} {{ relationType.name }}
</mat-option>
</mat-select>
</mat-form-field>
<ng-container *ngIf="accountOptions.length > 0">
<mat-form-field>
<mat-label>Account</mat-label>
<mat-select formControlName="savingsId">
<mat-option *ngFor="let accountOption of accountOptions" [value]="accountOption.id">
{{ accountOption.productName }} - {{ accountOption.accountNo }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field>
<mat-label>Amount</mat-label>
<input type="number" matInput required formControlName="amount" required>
</mat-form-field>
</ng-container>
</ng-container>
<ng-container *ngIf="showClientDetailsForm">
<mat-form-field>
<mat-label>Relationship</mat-label>
<mat-select formControlName="clientRelationshipTypeId">
<mat-option *ngFor="let relationType of relationTypes" [value]="relationType.id">
{{ relationType.name }}
</mat-option> </mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Amount</mat-label> <mat-label>First Name</mat-label>
<input type="number" matInput required formControlName="amount" required> <input matInput required formControlName="firstname" required>
<mat-error *ngIf="newGuarantorForm.controls.firstname.hasError('required')">
First Name <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>Last Name</mat-label>
<input matInput required formControlName="lastname" required>
<mat-error *ngIf="newGuarantorForm.controls.lastname.hasError('required')">
Last Name <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>Date Of Birth</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="dobDatePicker" formControlName="dob">
<mat-datepicker-toggle matSuffix [for]="dobDatePicker"></mat-datepicker-toggle>
<mat-datepicker #dobDatePicker></mat-datepicker>
</mat-form-field>
<mat-form-field>
<mat-label>Address Line 1</mat-label>
<input matInput formControlName="addressLine1">
</mat-form-field>
<mat-form-field>
<mat-label>Address Line 2</mat-label>
<input matInput formControlName="addressLine2">
</mat-form-field>
<mat-form-field>
<mat-label>City</mat-label>
<input matInput formControlName="city">
</mat-form-field>
<mat-form-field>
<mat-label>Zip</mat-label>
<input matInput formControlName="zip">
</mat-form-field>
<mat-form-field>
<mat-label>Mobile</mat-label>
<input type="number" matInput formControlName="mobileNumber">
</mat-form-field>
<mat-form-field>
<mat-label>Residence Phone #</mat-label>
<input type="number" matInput formControlName="housePhoneNumber">
</mat-form-field> </mat-form-field>
</ng-container> </ng-container>
</ng-container> </div>
<ng-container *ngIf="showClientDetailsForm"> <mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!newGuarantorForm.valid"
*mifosxHasPermission="'CREATE_GUARANTOR'">Submit</button>
</mat-card-actions>
<mat-form-field> </mat-card-content>
<mat-label>Relationship</mat-label>
<mat-select formControlName="clientRelationshipTypeId">
<mat-option *ngFor="let relationType of relationTypes" [value]="relationType.id">
{{ relationType.name }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field> </form>
<mat-label>First Name</mat-label>
<input matInput required formControlName="firstname" required>
<mat-error *ngIf="newGuarantorForm.controls.firstname.hasError('required')">
First Name <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>Last Name</mat-label>
<input matInput required formControlName="lastname" required>
<mat-error *ngIf="newGuarantorForm.controls.lastname.hasError('required')">
Last Name <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>Date Of Birth</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="dobDatePicker" formControlName="dob">
<mat-datepicker-toggle matSuffix [for]="dobDatePicker"></mat-datepicker-toggle>
<mat-datepicker #dobDatePicker></mat-datepicker>
</mat-form-field>
<mat-form-field>
<mat-label>Address Line 1</mat-label>
<input matInput formControlName="addressLine1">
</mat-form-field>
<mat-form-field>
<mat-label>Address Line 2</mat-label>
<input matInput formControlName="addressLine2">
</mat-form-field>
<mat-form-field>
<mat-label>City</mat-label>
<input matInput formControlName="city">
</mat-form-field>
<mat-form-field>
<mat-label>Zip</mat-label>
<input matInput formControlName="zip">
</mat-form-field>
<mat-form-field>
<mat-label>Mobile</mat-label>
<input type="number" matInput formControlName="mobileNumber">
</mat-form-field>
<mat-form-field>
<mat-label>Residence Phone #</mat-label>
<input type="number" matInput formControlName="housePhoneNumber">
</mat-form-field>
</ng-container>
<ng-container *ngIf="!(newGuarantorForm.controls.name === undefined)">
<div class="mat-table">
<div class="mat-header-row">
<div class="mat-header-cell">Client Details</div>
</div>
<div class="mat-row">
<div class="mat-cell">Name</div>
<div class="mat-cell">{{newGuarantorForm.controls.name.value.displayName}}</div>
</div>
<div class="mat-row">
<div class="mat-cell">Id</div>
<div class="mat-cell">{{newGuarantorForm.controls.name.value.id}}</div>
</div>
<div class="mat-row">
<div class="mat-cell">Office</div>
<div class="mat-cell">{{newGuarantorForm.controls.name.value.officeName}}</div>
</div>
</div> </div>
</ng-container>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px"> </mat-card>
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!newGuarantorForm.valid"
*mifosxHasPermission="'CREATE_GUARANTOR'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
<ng-container *ngIf="!(newGuarantorForm.controls.name === undefined)">
<div class="mat-table">
<div class="mat-header-row">
<div class="mat-header-cell">Client Details</div>
</div>
<div class="mat-row">
<div class="mat-cell">Name</div>
<div class="mat-cell">{{newGuarantorForm.controls.name.value.displayName}}</div>
</div>
<div class="mat-row">
<div class="mat-cell">Id</div>
<div class="mat-cell">{{newGuarantorForm.controls.name.value.id}}</div>
</div>
<div class="mat-row">
<div class="mat-cell">Office</div>
<div class="mat-cell">{{newGuarantorForm.controls.name.value.officeName}}</div>
</div>
</div>
</ng-container>
</div> </div>
@@ -1,51 +1,57 @@
<div class="container"> <div class="container">
<form [formGroup]="disbursementForm" (ngSubmit)="submit()"> <mat-card>
<mat-card-content> <form [formGroup]="disbursementForm" (ngSubmit)="submit()">
<div fxLayout="column">
<mat-form-field>
<mat-label>Disbursement On</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="disbursementDatePicker" required formControlName="actualDisbursementDate">
<mat-datepicker-toggle matSuffix [for]="disbursementDatePicker"></mat-datepicker-toggle>
<mat-datepicker #disbursementDatePicker></mat-datepicker>
<mat-error *ngIf="disbursementForm.controls.actualDisbursementDate.hasError('required')">
Disbursement Date is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-card-content>
<mat-label>Transaction amount</mat-label>
<input matInput required formControlName="transactionAmount">
<mat-error *ngIf="disbursementForm.controls.transactionAmount.hasError('required')">
Transaction Amount is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field *ngIf="dataObject.fixedEmiAmount !== null || dataObject.fixedEmiAmount !== undefined">
<mat-label>Fixed EMI amount</mat-label>
<input matInput required formControlName="fixedEmiAmount">
<mat-error *ngIf="disbursementForm.controls.fixedEmiAmount.hasError('required')">
Fixed EMI Amount is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <div fxLayout="column">
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea> <mat-form-field>
</mat-form-field> <mat-label>Disbursement On</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="disbursementDatePicker" required
formControlName="actualDisbursementDate">
<mat-datepicker-toggle matSuffix [for]="disbursementDatePicker"></mat-datepicker-toggle>
<mat-datepicker #disbursementDatePicker></mat-datepicker>
<mat-error *ngIf="disbursementForm.controls.actualDisbursementDate.hasError('required')">
Disbursement Date is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>Transaction amount</mat-label>
<input matInput required formControlName="transactionAmount">
<mat-error *ngIf="disbursementForm.controls.transactionAmount.hasError('required')">
Transaction Amount is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field *ngIf="dataObject.fixedEmiAmount !== null || dataObject.fixedEmiAmount !== undefined">
<mat-label>Fixed EMI amount</mat-label>
<input matInput required formControlName="fixedEmiAmount">
<mat-error *ngIf="disbursementForm.controls.fixedEmiAmount.hasError('required')">
Fixed EMI Amount is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
</mat-form-field>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!disbursementForm.valid"
*mifosxHasPermission="'DISBURSETOSAVINGS_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
</div> </mat-card>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!disbursementForm.valid" *mifosxHasPermission="'DISBURSETOSAVINGS_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
</div> </div>
@@ -0,0 +1,3 @@
.container {
max-width: 37rem;
}
@@ -1,91 +1,97 @@
<div class="container"> <div class="container">
<form [formGroup]="disbursementLoanForm" (ngSubmit)="submit()"> <mat-card>
<mat-card-content> <form [formGroup]="disbursementLoanForm" (ngSubmit)="submit()">
<div fxLayout="column"> <mat-card-content>
<mat-form-field> <div fxLayout="column">
<mat-label>Disbursed On</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="actualDisbursementDatePicker" required formControlName="actualDisbursementDate">
<mat-datepicker-toggle matSuffix [for]="actualDisbursementDatePicker"></mat-datepicker-toggle>
<mat-datepicker #actualDisbursementDatePicker></mat-datepicker>
<mat-error *ngIf="disbursementLoanForm.controls.actualDisbursementDate.hasError('required')">
Disbursed On Date<strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Transaction Amount</mat-label> <mat-label>Disbursed On</mat-label>
<input matInput required formControlName="transactionAmount"> <input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="actualDisbursementDatePicker" required
<mat-error *ngIf="disbursementLoanForm.controls.transactionAmount.hasError('required')"> formControlName="actualDisbursementDate">
Transaction Amount <strong>is required</strong> <mat-datepicker-toggle matSuffix [for]="actualDisbursementDatePicker"></mat-datepicker-toggle>
</mat-error> <mat-datepicker #actualDisbursementDatePicker></mat-datepicker>
</mat-form-field> <mat-error *ngIf="disbursementLoanForm.controls.actualDisbursementDate.hasError('required')">
Disbursed On Date<strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Payment Type</mat-label> <mat-label>Transaction Amount</mat-label>
<mat-select formControlName="paymentTypeId"> <input matInput required formControlName="transactionAmount">
<mat-option *ngFor="let paymentType of paymentTypes" [value]="paymentType.id"> <mat-error *ngIf="disbursementLoanForm.controls.transactionAmount.hasError('required')">
{{ paymentType.name }} Transaction Amount <strong>is required</strong>
</mat-option> </mat-error>
</mat-select> </mat-form-field>
</mat-form-field>
<mat-form-field>
<mat-label>Payment Type</mat-label>
<mat-select formControlName="paymentTypeId">
<mat-option *ngFor="let paymentType of paymentTypes" [value]="paymentType.id">
{{ paymentType.name }}
</mat-option>
</mat-select>
</mat-form-field>
<div fxFlexFill>
<span fxFlex="25%">Show Payment Details</span>
<span fxFlex="75%" class="expandCollapsebutton" (click)="addPaymentDetails()">
<button mat-raised-button color="primary" *ngIf="showPaymentDetails">
<i class="fa fa-minus"></i>
</button>
<button mat-raised-button color="primary" *ngIf="!showPaymentDetails">
<i class="fa fa-plus"></i>
</button>
</span>
</div>
<ng-container *ngIf="showPaymentDetails">
<mat-form-field>
<mat-label> Account #</mat-label>
<input matInput formControlName="accountNumber">
</mat-form-field>
<mat-form-field>
<mat-label>Cheque #</mat-label>
<input matInput formControlName="checkNumber">
</mat-form-field>
<mat-form-field>
<mat-label>Routing Code</mat-label>
<input matInput formControlName="routingCode">
</mat-form-field>
<mat-form-field>
<mat-label>Reciept #</mat-label>
<input matInput formControlName="receiptNumber">
</mat-form-field>
<mat-form-field>
<mat-label>Bank #</mat-label>
<input matInput formControlName="bankNumber">
</mat-form-field>
</ng-container>
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
</mat-form-field>
<div fxFlexFill>
<span fxFlex="25%">Show Payment Details</span>
<span fxFlex="75%" class="expandCollapsebutton" (click)="addPaymentDetails()">
<button mat-raised-button color="primary" *ngIf="showPaymentDetails">
<i class="fa fa-minus"></i>
</button>
<button mat-raised-button color="primary" *ngIf="!showPaymentDetails">
<i class="fa fa-plus"></i>
</button>
</span>
</div> </div>
<ng-container *ngIf="showPaymentDetails"> <mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<mat-form-field> <button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<mat-label> Account #</mat-label> <button mat-raised-button color="primary" [disabled]="!disbursementLoanForm.valid"
<input matInput formControlName="accountNumber"> *mifosxHasPermission="'DISBURSE_LOAN'">Submit</button>
</mat-form-field> </mat-card-actions>
<mat-form-field>
<mat-label>Cheque #</mat-label>
<input matInput formControlName="checkNumber">
</mat-form-field>
<mat-form-field>
<mat-label>Routing Code</mat-label>
<input matInput formControlName="routingCode">
</mat-form-field>
<mat-form-field>
<mat-label>Reciept #</mat-label>
<input matInput formControlName="receiptNumber">
</mat-form-field>
<mat-form-field>
<mat-label>Bank #</mat-label>
<input matInput formControlName="bankNumber">
</mat-form-field>
</ng-container>
<mat-form-field> </mat-card-content>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
</mat-form-field>
</div> </form>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px"> </mat-card>
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!disbursementLoanForm.valid" *mifosxHasPermission="'DISBURSE_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
</div> </div>
@@ -1,3 +1,7 @@
.expandCollapsebutton { .expandCollapsebutton {
margin-top: -7px; margin-top: -7px;
} }
.container {
max-width: 37rem;
}
@@ -1,60 +1,66 @@
<div class="container"> <div class="container">
<form [formGroup]="foreclosureForm" (ngSubmit)="submit()"> <mat-card>
<mat-card-content> <form [formGroup]="foreclosureForm" (ngSubmit)="submit()">
<div fxLayout="column"> <mat-card-content>
<mat-form-field> <div fxLayout="column">
<mat-label>Transaction Date</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="transactionsDatePicker" required formControlName="transactionDate">
<mat-datepicker-toggle matSuffix [for]="transactionsDatePicker"></mat-datepicker-toggle>
<mat-datepicker #transactionsDatePicker></mat-datepicker>
<mat-error *ngIf="foreclosureForm.controls.transactionDate.hasError('required')">
Transaction Date <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Principal</mat-label> <mat-label>Transaction Date</mat-label>
<input matInput required formControlName="outstandingPrincipalPortion"> <input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="transactionsDatePicker" required
</mat-form-field> formControlName="transactionDate">
<mat-datepicker-toggle matSuffix [for]="transactionsDatePicker"></mat-datepicker-toggle>
<mat-datepicker #transactionsDatePicker></mat-datepicker>
<mat-error *ngIf="foreclosureForm.controls.transactionDate.hasError('required')">
Transaction Date <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Interest</mat-label> <mat-label>Principal</mat-label>
<input matInput required formControlName="outstandingInterestPortion"> <input matInput required formControlName="outstandingPrincipalPortion">
</mat-form-field> </mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Fee Amount</mat-label> <mat-label>Interest</mat-label>
<input matInput required formControlName="outstandingFeeChargesPortion"> <input matInput required formControlName="outstandingInterestPortion">
</mat-form-field> </mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Penalty Amount</mat-label> <mat-label>Fee Amount</mat-label>
<input matInput required formControlName="outstandingPenaltyChargesPortion"> <input matInput required formControlName="outstandingFeeChargesPortion">
</mat-form-field> </mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Transaction Amount</mat-label> <mat-label>Penalty Amount</mat-label>
<input matInput required formControlName="transactionAmount"> <input matInput required formControlName="outstandingPenaltyChargesPortion">
</mat-form-field> </mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Note</mat-label> <mat-label>Transaction Amount</mat-label>
<textarea matInput formControlName="note"></textarea> <input matInput required formControlName="transactionAmount">
</mat-form-field> </mat-form-field>
</div> <mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
</mat-form-field>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px"> </div>
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!foreclosureForm.valid" *mifosxHasPermission="'FORECLOSURE_LOAN'">Foreclosure</button>
</mat-card-actions>
</mat-card-content> <mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!foreclosureForm.valid"
*mifosxHasPermission="'FORECLOSURE_LOAN'">Foreclosure</button>
</mat-card-actions>
</form> </mat-card-content>
</form>
</mat-card>
</div> </div>
@@ -0,0 +1,3 @@
.container {
max-width: 37rem;
}
@@ -1,26 +1,22 @@
<div class="container"> <mifosx-loans-account-close [dataObject]="actionButtonData" *ngIf="actions['Close']"></mifosx-loans-account-close>
<mat-card> <mifosx-undo-approval *ngIf="actions['Undo Approval']"></mifosx-undo-approval>
<mifosx-loans-account-close [dataObject]="actionButtonData" *ngIf="actions.close"></mifosx-loans-account-close> <mifosx-assign-loan-officer *ngIf="actions['Assign Loan Officer']" [dataObject]="actionButtonData" ></mifosx-assign-loan-officer>
<mifosx-undo-approval *ngIf="actions.undo_approval"></mifosx-undo-approval> <mifosx-foreclosure *ngIf="actions['Foreclosure']"></mifosx-foreclosure>
<mifosx-assign-loan-officer *ngIf="actions.assign_loan_officer" [dataObject]="actionButtonData" ></mifosx-assign-loan-officer> <mifosx-prepay-loan [dataObject]="actionButtonData" *ngIf="actions['Prepay Loan']"></mifosx-prepay-loan>
<mifosx-foreclosure *ngIf="actions.foreclosure"></mifosx-foreclosure> <mifosx-make-repayment [dataObject]="actionButtonData" *ngIf="actions['Make Repayment']"></mifosx-make-repayment>
<mifosx-prepay-loan [dataObject]="actionButtonData" *ngIf="actions.prepay_loan"></mifosx-prepay-loan> <mifosx-waive-interest [dataObject]="actionButtonData" *ngIf="actions['Waive Interest']"></mifosx-waive-interest>
<mifosx-make-repayment [dataObject]="actionButtonData" *ngIf="actions.make_repayment"></mifosx-make-repayment> <mifosx-write-off-page [dataObject]="actionButtonData" *ngIf="actions['Write Off']"></mifosx-write-off-page>
<mifosx-waive-interest [dataObject]="actionButtonData" *ngIf="actions.waive_interest"></mifosx-waive-interest> <mifosx-close-as-rescheduled [dataObject]="actionButtonData" *ngIf="actions['Close (as Rescheduled)']"></mifosx-close-as-rescheduled>
<mifosx-write-off-page [dataObject]="actionButtonData" *ngIf="actions.write_off"></mifosx-write-off-page> <mifosx-loan-reschedule [dataObject]="actionButtonData" *ngIf="actions['Reschedule']"></mifosx-loan-reschedule>
<mifosx-close-as-rescheduled [dataObject]="actionButtonData" *ngIf="actions.close_as_rescheduled"></mifosx-close-as-rescheduled> <mifosx-recovery-repayment [dataObject]="actionButtonData" *ngIf="actions['Recovery Payment']"></mifosx-recovery-repayment>
<mifosx-loan-reschedule [dataObject]="actionButtonData" *ngIf="actions.reschedule"></mifosx-loan-reschedule> <mifosx-view-guarantors [dataObject]="actionButtonData" *ngIf="actions['View Guarantors']"></mifosx-view-guarantors>
<mifosx-recovery-repayment [dataObject]="actionButtonData" *ngIf="actions.recovery_payment"></mifosx-recovery-repayment> <mifosx-create-guarantor [dataObject]="actionButtonData" *ngIf="actions['Create Guarantor']"></mifosx-create-guarantor>
<mifosx-view-guarantors [dataObject]="actionButtonData" *ngIf="actions.view_guarantors"></mifosx-view-guarantors> <mifosx-disburse-loan-account [dataObject]="actionButtonData" *ngIf="actions['Disburse To Savings']"></mifosx-disburse-loan-account>
<mifosx-create-guarantor [dataObject]="actionButtonData" *ngIf="actions.create_guarantor"></mifosx-create-guarantor> <mifosx-reject-loan *ngIf="actions['Reject']"></mifosx-reject-loan>
<mifosx-disburse-loan-account [dataObject]="actionButtonData" *ngIf="actions.disburse_to_savings"></mifosx-disburse-loan-account> <mifosx-disburse [dataObject]="actionButtonData" *ngIf="actions['Disburse']"></mifosx-disburse>
<mifosx-reject-loan *ngIf="actions.reject"></mifosx-reject-loan> <mifosx-withdrawn-by-client *ngIf="actions['Withdrawn by Client']"></mifosx-withdrawn-by-client>
<mifosx-disburse [dataObject]="actionButtonData" *ngIf="actions.disburse"></mifosx-disburse> <mifosx-add-collateral [dataObject]="actionButtonData" *ngIf="actions['Add Collateral']"></mifosx-add-collateral>
<mifosx-withdrawn-by-client *ngIf="actions.withdrawn_by_client"></mifosx-withdrawn-by-client> <mifosx-undo-disbursal *ngIf="actions['Undo Disbursal']"></mifosx-undo-disbursal>
<mifosx-add-collateral [dataObject]="actionButtonData" *ngIf="actions.add_collateral"></mifosx-add-collateral> <mifosx-loan-screen-reports [dataObject]="actionButtonData" *ngIf="actions['Loan Screen Reports']"></mifosx-loan-screen-reports>
<mifosx-undo-disbursal *ngIf="actions.undo_disbursal"></mifosx-undo-disbursal> <mifosx-approve-loan *ngIf="actions['Approve']" ></mifosx-approve-loan>
<mifosx-loan-screen-reports [dataObject]="actionButtonData" *ngIf="actions.loan_screen_reports"></mifosx-loan-screen-reports> <mifosx-add-loan-charge *ngIf="actions['Add Loan Charge']"></mifosx-add-loan-charge>
<mifosx-approve-loan *ngIf="actions.approve" ></mifosx-approve-loan>
<mifosx-add-loan-charge *ngIf="actions.add_loan_charge"></mifosx-add-loan-charge>
</mat-card>
</div>
@@ -1,3 +0,0 @@
.container {
padding: 3%;
}
@@ -13,50 +13,50 @@ import { ActivatedRoute, Router } from '@angular/router';
export class LoanAccountActionsComponent { export class LoanAccountActionsComponent {
/** flag object to store possible actions and render appropriate UI to the user */ /** flag object to store possible actions and render appropriate UI to the user */
actions: { close: boolean, actions: { 'Close': boolean,
undo_approval: boolean, 'Undo Approval': boolean,
write_off: boolean, 'Write Off': boolean,
add_collateral: boolean, 'Add Collateral': boolean,
assign_loan_officer: boolean, 'Assign Loan Officer': boolean,
foreclosure: boolean, 'Foreclosure': boolean,
prepay_loan: boolean, 'Prepay Loan': boolean,
reject: boolean, 'Reject': boolean,
disburse_to_savings: boolean, 'Disburse To Savings': boolean,
make_repayment: boolean, 'Make Repayment': boolean,
waive_interest: boolean, 'Waive Interest': boolean,
close_as_rescheduled: boolean, 'Close (as Rescheduled)': boolean,
reschedule: boolean, 'Reschedule': boolean,
recovery_payment: boolean, 'Recovery Payment': boolean,
view_guarantors: boolean, 'View Guarantors': boolean,
create_guarantor: boolean, 'Create Guarantor': boolean,
disburse: boolean, 'Disburse': boolean,
withdrawn_by_client: boolean, 'Withdrawn by Client': boolean,
undo_disbursal: boolean, 'Undo Disbursal': boolean,
loan_screen_reports: boolean, 'Loan Screen Reports': boolean,
approve: boolean, 'Approve': boolean,
add_loan_charge: boolean } = { 'Add Loan Charge': boolean } = {
close: false, 'Close': false,
undo_approval: false, 'Undo Approval': false,
write_off: false, 'Write Off': false,
add_collateral: false, 'Add Collateral': false,
assign_loan_officer: false, 'Assign Loan Officer': false,
foreclosure: false, 'Foreclosure': false,
prepay_loan: false, 'Prepay Loan': false,
reject: false, 'Reject': false,
disburse_to_savings: false, 'Disburse To Savings': false,
make_repayment: false, 'Make Repayment': false,
waive_interest: false, 'Waive Interest': false,
close_as_rescheduled: false, 'Close (as Rescheduled)': false,
reschedule: false, 'Reschedule': false,
recovery_payment: false, 'Recovery Payment': false,
view_guarantors: false, 'View Guarantors': false,
create_guarantor: false, 'Create Guarantor': false,
disburse: false, 'Disburse': false,
withdrawn_by_client: false, 'Withdrawn by Client': false,
undo_disbursal: false, 'Undo Disbursal': false,
loan_screen_reports: false, 'Loan Screen Reports': false,
approve: false, 'Approve': false,
add_loan_charge: false }; 'Add Loan Charge': false };
actionButtonData: any; actionButtonData: any;
actionName: any; actionName: any;
@@ -73,13 +73,13 @@ export class LoanAccountActionsComponent {
this.route.params.subscribe(params => { this.route.params.subscribe(params => {
this.actionName = params['action']; this.actionName = params['action'];
if (this.actionName === 'change-loan-officer') { if (this.actionName === 'Change Loan Officer') {
this.actionName = 'assign-loan-officer'; this.actionName = 'Assign Loan Officer';
} }
for (const key of Object.keys(this.actions)) { for (const key of Object.keys(this.actions)) {
this.actions[key] = false; this.actions[key] = false;
} }
this.actions[this.actionName.replace(/-/g, '_')] = true; this.actions[this.actionName] = true;
}); });
} }
@@ -1,75 +1,80 @@
<div class="container"> <div class="container">
<form [formGroup]="rescheduleLoanForm" (ngSubmit)="submit()"> <mat-card>
<mat-card-content> <form [formGroup]="rescheduleLoanForm" (ngSubmit)="submit()">
<div fxLayout="column"> <mat-card-content>
<mat-form-field> <div fxLayout="column">
<mat-label>Reschedule from Installment On</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="rescheduleDatePicker" required formControlName="rescheduleFromDate">
<mat-datepicker-toggle matSuffix [for]="rescheduleDatePicker"></mat-datepicker-toggle>
<mat-datepicker #rescheduleDatePicker></mat-datepicker>
<mat-error *ngIf="rescheduleLoanForm.controls.rescheduleFromDate.hasError('required')">
Reschedule Date <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>Reason for Rescheduling</mat-label>
<mat-select formControlName="rescheduleReasonId">
<mat-option *ngFor="let rescheduleReasonCode of codes" [value]="rescheduleReasonCode.id">
{{ rescheduleReasonCode.name }}
</mat-option>
</mat-select>
<mat-error *ngIf="rescheduleLoanForm.controls.rescheduleReasonId.hasError('required')">
Reason for Rescheduling <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>Submitted On</mat-label>
<input matInput [min]="minDate" [matDatepicker]="submittedDatePicker" required formControlName="submittedOnDate">
<mat-datepicker-toggle matSuffix [for]="submittedDatePicker"></mat-datepicker-toggle>
<mat-datepicker #submittedDatePicker></mat-datepicker>
<mat-error *ngIf="rescheduleLoanForm.controls.submittedOnDate.hasError('required')">
Submitted On Date <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>Comments</mat-label>
<textarea matInput formControlName="rescheduleReasonComment"></textarea>
</mat-form-field>
<mat-checkbox [formControl]="changeRepaymentDate"> Change Repayment Date </mat-checkbox>
<ng-container *ngIf="changeRepaymentDate.value">
<mat-form-field> <mat-form-field>
<mat-label>Installment Rescheduled to</mat-label> <mat-label>Reschedule from Installment On</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="installmentrescheduledDatePicker" formControlName="adjustedDueDate"> <input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="rescheduleDatePicker" required
<mat-datepicker-toggle matSuffix [for]="installmentrescheduledDatePicker"></mat-datepicker-toggle> formControlName="rescheduleFromDate">
<mat-datepicker #installmentrescheduledDatePicker></mat-datepicker> <mat-datepicker-toggle matSuffix [for]="rescheduleDatePicker"></mat-datepicker-toggle>
</mat-form-field> <mat-datepicker #rescheduleDatePicker></mat-datepicker>
</ng-container> <mat-error *ngIf="rescheduleLoanForm.controls.rescheduleFromDate.hasError('required')">
Reschedule Date <strong>is required</strong>
<mat-checkbox [formControl]="introduceGracePeriods"> Introduce Mid-term grace periods </mat-checkbox> </mat-error>
<ng-container *ngIf="introduceGracePeriods.value">
<mat-form-field>
<mat-label>Principal Grace Periods </mat-label>
<input matInput formControlName="graceOnPrincipal">
</mat-form-field> </mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Interest Grace Periods </mat-label> <mat-label>Reason for Rescheduling</mat-label>
<input matInput formControlName="graceOnInterest"> <mat-select formControlName="rescheduleReasonId">
<mat-option *ngFor="let rescheduleReasonCode of codes" [value]="rescheduleReasonCode.id">
{{ rescheduleReasonCode.name }}
</mat-option>
</mat-select>
<mat-error *ngIf="rescheduleLoanForm.controls.rescheduleReasonId.hasError('required')">
Reason for Rescheduling <strong>is required</strong>
</mat-error>
</mat-form-field> </mat-form-field>
</ng-container>
<mat-checkbox [formControl]="extendRepaymentPeriod"> Extend Repayment Period </mat-checkbox> <mat-form-field>
<mat-label>Submitted On</mat-label>
<input matInput [min]="minDate" [matDatepicker]="submittedDatePicker" required
formControlName="submittedOnDate">
<mat-datepicker-toggle matSuffix [for]="submittedDatePicker"></mat-datepicker-toggle>
<mat-datepicker #submittedDatePicker></mat-datepicker>
<mat-error *ngIf="rescheduleLoanForm.controls.submittedOnDate.hasError('required')">
Submitted On Date <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>Comments</mat-label>
<textarea matInput formControlName="rescheduleReasonComment"></textarea>
</mat-form-field>
<mat-checkbox [formControl]="changeRepaymentDate"> Change Repayment Date </mat-checkbox>
<ng-container *ngIf="changeRepaymentDate.value">
<mat-form-field>
<mat-label>Installment Rescheduled to</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="installmentrescheduledDatePicker"
formControlName="adjustedDueDate">
<mat-datepicker-toggle matSuffix [for]="installmentrescheduledDatePicker"></mat-datepicker-toggle>
<mat-datepicker #installmentrescheduledDatePicker></mat-datepicker>
</mat-form-field>
</ng-container>
<mat-checkbox [formControl]="introduceGracePeriods"> Introduce Mid-term grace periods </mat-checkbox>
<ng-container *ngIf="introduceGracePeriods.value">
<mat-form-field>
<mat-label>Principal Grace Periods </mat-label>
<input matInput formControlName="graceOnPrincipal">
</mat-form-field>
<mat-form-field>
<mat-label>Interest Grace Periods </mat-label>
<input matInput formControlName="graceOnInterest">
</mat-form-field>
</ng-container>
<mat-checkbox [formControl]="extendRepaymentPeriod"> Extend Repayment Period </mat-checkbox>
<ng-container *ngIf="extendRepaymentPeriod.value"> <ng-container *ngIf="extendRepaymentPeriod.value">
<mat-form-field> <mat-form-field>
<mat-label>Number Of new Repayments</mat-label> <mat-label>Number Of new Repayments</mat-label>
@@ -77,7 +82,7 @@
</mat-form-field> </mat-form-field>
</ng-container> </ng-container>
<mat-checkbox [formControl]="adjustinterestrates"> Adjust interest rates for remainder of loan </mat-checkbox> <mat-checkbox [formControl]="adjustinterestrates"> Adjust interest rates for remainder of loan </mat-checkbox>
<ng-container *ngIf="adjustinterestrates.value"> <ng-container *ngIf="adjustinterestrates.value">
<mat-form-field> <mat-form-field>
<mat-label>New Interest Rate</mat-label> <mat-label>New Interest Rate</mat-label>
@@ -85,15 +90,18 @@
</mat-form-field> </mat-form-field>
</ng-container> </ng-container>
</div> </div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px"> <mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button> <button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!rescheduleLoanForm.valid" *mifosxHasPermission="'APPROVE_RESCHEDULELOAN'">Submit</button> <button mat-raised-button color="primary" [disabled]="!rescheduleLoanForm.valid"
</mat-card-actions> *mifosxHasPermission="'APPROVE_RESCHEDULELOAN'">Submit</button>
</mat-card-actions>
</mat-card-content> </mat-card-content>
</form> </form>
</mat-card>
</div> </div>
@@ -0,0 +1,3 @@
.container {
max-width: 37rem;
}
@@ -80,7 +80,7 @@ export class LoanRescheduleComponent implements OnInit {
// TODO: needs to be updated // TODO: needs to be updated
// mentioned in Community App: // mentioned in Community App:
// location.path('/loans/' + scope.loanId + '/viewreschedulerequest/'+ data.resourceId); // location.path('/loans-accounts/' + scope.loanId + '/viewreschedulerequest/'+ data.resourceId);
this.router.navigate(['../../general'], { relativeTo: this.route }); this.router.navigate(['../../general'], { relativeTo: this.route });
}); });
} }
@@ -25,7 +25,7 @@
</mat-card-content> </mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px"> <mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../']">Cancel</button> <button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!loanScreenReportForm.valid"> <button mat-raised-button color="primary" [disabled]="!loanScreenReportForm.valid">
<fa-icon icon="cogs" size="sm"></fa-icon>&nbsp;&nbsp;Generate Report <fa-icon icon="cogs" size="sm"></fa-icon>&nbsp;&nbsp;Generate Report
</button> </button>
@@ -1,35 +1,41 @@
<div class="container"> <div class="container">
<form [formGroup]="closeLoanForm" (ngSubmit)="submit()"> <mat-card>
<mat-card-content> <form [formGroup]="closeLoanForm" (ngSubmit)="submit()">
<div fxLayout="column"> <mat-card-content>
<mat-form-field> <div fxLayout="column">
<mat-label>Closed On</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="closedDatePicker" required formControlName="transactionDate">
<mat-datepicker-toggle matSuffix [for]="closedDatePicker"></mat-datepicker-toggle>
<mat-datepicker #closedDatePicker></mat-datepicker>
<mat-error *ngIf="closeLoanForm.controls.transactionDate.hasError('required')">
Closed Date <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Note</mat-label> <mat-label>Closed On</mat-label>
<textarea matInput formControlName="note"></textarea> <input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="closedDatePicker" required
</mat-form-field> formControlName="transactionDate">
<mat-datepicker-toggle matSuffix [for]="closedDatePicker"></mat-datepicker-toggle>
<mat-datepicker #closedDatePicker></mat-datepicker>
<mat-error *ngIf="closeLoanForm.controls.transactionDate.hasError('required')">
Closed Date <strong>is required</strong>
</mat-error>
</mat-form-field>
</div> <mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
</mat-form-field>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px"> </div>
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!closeLoanForm.valid" *mifosxHasPermission="'CLOSE_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content> <mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!closeLoanForm.valid"
*mifosxHasPermission="'CLOSE_LOAN'">Submit</button>
</mat-card-actions>
</form> </mat-card-content>
</form>
</mat-card>
</div> </div>
@@ -0,0 +1,3 @@
.container {
max-width: 37rem;
}
@@ -1,91 +1,97 @@
<div class="container"> <div class="container">
<form [formGroup]="repaymentLoanForm" (ngSubmit)="submit()"> <mat-card>
<mat-card-content> <form [formGroup]="repaymentLoanForm" (ngSubmit)="submit()">
<div fxLayout="column"> <mat-card-content>
<mat-form-field> <div fxLayout="column">
<mat-label>Transaction Date</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="transactionDatePicker" required formControlName="transactionDate">
<mat-datepicker-toggle matSuffix [for]="transactionDatePicker"></mat-datepicker-toggle>
<mat-datepicker #transactionDatePicker></mat-datepicker>
<mat-error *ngIf="repaymentLoanForm.controls.transactionDate.hasError('required')">
Transaction Date <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Transaction Amount</mat-label> <mat-label>Transaction Date</mat-label>
<input matInput required formControlName="transactionAmount"> <input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="transactionDatePicker" required
<mat-error *ngIf="repaymentLoanForm.controls.transactionAmount.hasError('required')"> formControlName="transactionDate">
Transaction Amount <strong>is required</strong> <mat-datepicker-toggle matSuffix [for]="transactionDatePicker"></mat-datepicker-toggle>
</mat-error> <mat-datepicker #transactionDatePicker></mat-datepicker>
</mat-form-field> <mat-error *ngIf="repaymentLoanForm.controls.transactionDate.hasError('required')">
Transaction Date <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Payment Type</mat-label> <mat-label>Transaction Amount</mat-label>
<mat-select formControlName="paymentTypeId"> <input matInput required formControlName="transactionAmount">
<mat-option *ngFor="let paymentType of paymentTypes" [value]="paymentType.id"> <mat-error *ngIf="repaymentLoanForm.controls.transactionAmount.hasError('required')">
{{ paymentType.name }} Transaction Amount <strong>is required</strong>
</mat-option> </mat-error>
</mat-select> </mat-form-field>
</mat-form-field>
<mat-form-field>
<mat-label>Payment Type</mat-label>
<mat-select formControlName="paymentTypeId">
<mat-option *ngFor="let paymentType of paymentTypes" [value]="paymentType.id">
{{ paymentType.name }}
</mat-option>
</mat-select>
</mat-form-field>
<div fxFlexFill>
<span fxFlex="25%">Show Payment Details</span>
<span fxFlex="75%" class="expandCollapsebutton" (click)="addPaymentDetails()">
<button mat-raised-button color="primary" *ngIf="showPaymentDetails">
<i class="fa fa-minus"></i>
</button>
<button mat-raised-button color="primary" *ngIf="!showPaymentDetails">
<i class="fa fa-plus"></i>
</button>
</span>
</div>
<ng-container *ngIf="showPaymentDetails">
<mat-form-field>
<mat-label> Account #</mat-label>
<input matInput formControlName="accountNumber">
</mat-form-field>
<mat-form-field>
<mat-label>Cheque #</mat-label>
<input matInput formControlName="checkNumber">
</mat-form-field>
<mat-form-field>
<mat-label>Routing Code</mat-label>
<input matInput formControlName="routingCode">
</mat-form-field>
<mat-form-field>
<mat-label>Reciept #</mat-label>
<input matInput formControlName="receiptNumber">
</mat-form-field>
<mat-form-field>
<mat-label>Bank #</mat-label>
<input matInput formControlName="bankNumber">
</mat-form-field>
</ng-container>
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
</mat-form-field>
<div fxFlexFill>
<span fxFlex="25%">Show Payment Details</span>
<span fxFlex="75%" class="expandCollapsebutton" (click)="addPaymentDetails()">
<button mat-raised-button color="primary" *ngIf="showPaymentDetails">
<i class="fa fa-minus"></i>
</button>
<button mat-raised-button color="primary" *ngIf="!showPaymentDetails">
<i class="fa fa-plus"></i>
</button>
</span>
</div> </div>
<ng-container *ngIf="showPaymentDetails"> <mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<mat-form-field> <button type="button" mat-raised-button [routerLink]="['../../../general']">Cancel</button>
<mat-label> Account #</mat-label> <button mat-raised-button color="primary" [disabled]="!repaymentLoanForm.valid"
<input matInput formControlName="accountNumber"> *mifosxHasPermission="'REPAYMENT_LOAN'">Submit</button>
</mat-form-field> </mat-card-actions>
<mat-form-field>
<mat-label>Cheque #</mat-label>
<input matInput formControlName="checkNumber">
</mat-form-field>
<mat-form-field>
<mat-label>Routing Code</mat-label>
<input matInput formControlName="routingCode">
</mat-form-field>
<mat-form-field>
<mat-label>Reciept #</mat-label>
<input matInput formControlName="receiptNumber">
</mat-form-field>
<mat-form-field>
<mat-label>Bank #</mat-label>
<input matInput formControlName="bankNumber">
</mat-form-field>
</ng-container>
<mat-form-field> </mat-card-content>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
</mat-form-field>
</div> </form>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px"> </mat-card>
<button type="button" mat-raised-button [routerLink]="['../../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!repaymentLoanForm.valid" *mifosxHasPermission="'REPAYMENT_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
</div> </div>
@@ -1,3 +1,7 @@
.expandCollapsebutton { .expandCollapsebutton {
margin-top: -7px; margin-top: -7px;
} }
.container {
max-width: 37rem;
}
@@ -1,104 +1,110 @@
<div class="container"> <div class="container">
<form [formGroup]="prepayLoanForm" (ngSubmit)="submit()"> <mat-card>
<mat-card-content> <form [formGroup]="prepayLoanForm" (ngSubmit)="submit()">
<div fxLayout="column"> <mat-card-content>
<mat-form-field> <div fxLayout="column">
<mat-label>Transaction Date</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="transactionDatePicker" required formControlName="transactionDate">
<mat-datepicker-toggle matSuffix [for]="transactionDatePicker"></mat-datepicker-toggle>
<mat-datepicker #transactionDatePicker></mat-datepicker>
<mat-error *ngIf="prepayLoanForm.controls.transactionDate.hasError('required')">
Transaction Date <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Transaction Amount</mat-label> <mat-label>Transaction Date</mat-label>
<input matInput required formControlName="transactionAmount"> <input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="transactionDatePicker" required
<mat-error *ngIf="prepayLoanForm.controls.transactionAmount.hasError('required')"> formControlName="transactionDate">
Transaction Amount <strong>is required</strong> <mat-datepicker-toggle matSuffix [for]="transactionDatePicker"></mat-datepicker-toggle>
</mat-error> <mat-datepicker #transactionDatePicker></mat-datepicker>
</mat-form-field> <mat-error *ngIf="prepayLoanForm.controls.transactionDate.hasError('required')">
Transaction Date <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Principal</mat-label> <mat-label>Transaction Amount</mat-label>
<input matInput formControlName="principal"> <input matInput required formControlName="transactionAmount">
</mat-form-field> <mat-error *ngIf="prepayLoanForm.controls.transactionAmount.hasError('required')">
Transaction Amount <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Interest Amount</mat-label> <mat-label>Principal</mat-label>
<input matInput required formControlName="interestAmount"> <input matInput formControlName="principal">
<mat-error *ngIf="prepayLoanForm.controls.interestAmount.hasError('required')"> </mat-form-field>
Interest Amount <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Payment Type</mat-label> <mat-label>Interest Amount</mat-label>
<mat-select formControlName="paymentTypeId"> <input matInput required formControlName="interestAmount">
<mat-option *ngFor="let paymentType of paymentTypes" [value]="paymentType.id"> <mat-error *ngIf="prepayLoanForm.controls.interestAmount.hasError('required')">
{{ paymentType.name }} Interest Amount <strong>is required</strong>
</mat-option> </mat-error>
</mat-select> </mat-form-field>
</mat-form-field>
<mat-form-field>
<mat-label>Payment Type</mat-label>
<mat-select formControlName="paymentTypeId">
<mat-option *ngFor="let paymentType of paymentTypes" [value]="paymentType.id">
{{ paymentType.name }}
</mat-option>
</mat-select>
</mat-form-field>
<div fxFlexFill>
<span fxFlex="25%">Show Payment Details</span>
<span fxFlex="75%" class="expandCollapsebutton" (click)="addPaymentDetails()">
<button mat-raised-button color="primary" *ngIf="showPaymentDetails">
<i class="fa fa-minus"></i>
</button>
<button mat-raised-button color="primary" *ngIf="!showPaymentDetails">
<i class="fa fa-plus"></i>
</button>
</span>
</div>
<ng-container *ngIf="showPaymentDetails">
<mat-form-field>
<mat-label> Account #</mat-label>
<input matInput formControlName="accountNumber">
</mat-form-field>
<mat-form-field>
<mat-label>Cheque #</mat-label>
<input matInput formControlName="checkNumber">
</mat-form-field>
<mat-form-field>
<mat-label>Routing Code</mat-label>
<input matInput formControlName="routingCode">
</mat-form-field>
<mat-form-field>
<mat-label>Reciept #</mat-label>
<input matInput formControlName="receiptNumber">
</mat-form-field>
<mat-form-field>
<mat-label>Bank #</mat-label>
<input matInput formControlName="bankNumber">
</mat-form-field>
</ng-container>
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
</mat-form-field>
<div fxFlexFill>
<span fxFlex="25%">Show Payment Details</span>
<span fxFlex="75%" class="expandCollapsebutton" (click)="addPaymentDetails()">
<button mat-raised-button color="primary" *ngIf="showPaymentDetails">
<i class="fa fa-minus"></i>
</button>
<button mat-raised-button color="primary" *ngIf="!showPaymentDetails">
<i class="fa fa-plus"></i>
</button>
</span>
</div> </div>
<ng-container *ngIf="showPaymentDetails"> <mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<mat-form-field> <button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<mat-label> Account #</mat-label> <button mat-raised-button color="primary" [disabled]="!prepayLoanForm.valid"
<input matInput formControlName="accountNumber"> *mifosxHasPermission="'REPAYMENT_LOAN'">Submit</button>
</mat-form-field> </mat-card-actions>
<mat-form-field>
<mat-label>Cheque #</mat-label>
<input matInput formControlName="checkNumber">
</mat-form-field>
<mat-form-field>
<mat-label>Routing Code</mat-label>
<input matInput formControlName="routingCode">
</mat-form-field>
<mat-form-field>
<mat-label>Reciept #</mat-label>
<input matInput formControlName="receiptNumber">
</mat-form-field>
<mat-form-field>
<mat-label>Bank #</mat-label>
<input matInput formControlName="bankNumber">
</mat-form-field>
</ng-container>
<mat-form-field> </mat-card-content>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
</mat-form-field>
</div> </form>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px"> </mat-card>
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!prepayLoanForm.valid" *mifosxHasPermission="'REPAYMENT_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
</div> </div>
@@ -1,3 +1,7 @@
.expandCollapsebutton { .expandCollapsebutton {
margin-top: -7px; margin-top: -7px;
} }
.container {
max-width: 37rem;
}
@@ -1,93 +1,97 @@
<div class="container"> <div class="container">
<form [formGroup]="recoveryRepaymentLoanForm" (ngSubmit)="submit()"> <mat-card>
<mat-card-content> <form [formGroup]="recoveryRepaymentLoanForm" (ngSubmit)="submit()">
<div fxLayout="column"> <mat-card-content>
<mat-form-field> <div fxLayout="column">
<mat-label>Transaction Date</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="transactionDatePicker" required
formControlName="transactionDate">
<mat-datepicker-toggle matSuffix [for]="transactionDatePicker"></mat-datepicker-toggle>
<mat-datepicker #transactionDatePicker></mat-datepicker>
<mat-error *ngIf="recoveryRepaymentLoanForm.controls.transactionDate.hasError('required')">
Transaction Date <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Transaction Amount</mat-label> <mat-label>Transaction Date</mat-label>
<input matInput required formControlName="transactionAmount"> <input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="transactionDatePicker" required
<mat-error *ngIf="recoveryRepaymentLoanForm.controls.transactionAmount.hasError('required')"> formControlName="transactionDate">
Transaction Amount <strong>is required</strong> <mat-datepicker-toggle matSuffix [for]="transactionDatePicker"></mat-datepicker-toggle>
</mat-error> <mat-datepicker #transactionDatePicker></mat-datepicker>
</mat-form-field> <mat-error *ngIf="recoveryRepaymentLoanForm.controls.transactionDate.hasError('required')">
Transaction Date <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Payment Type</mat-label> <mat-label>Transaction Amount</mat-label>
<mat-select formControlName="paymentTypeId"> <input matInput required formControlName="transactionAmount">
<mat-option *ngFor="let paymentType of paymentTypes" [value]="paymentType.id"> <mat-error *ngIf="recoveryRepaymentLoanForm.controls.transactionAmount.hasError('required')">
{{ paymentType.name }} Transaction Amount <strong>is required</strong>
</mat-option> </mat-error>
</mat-select> </mat-form-field>
</mat-form-field>
<mat-form-field>
<mat-label>Payment Type</mat-label>
<mat-select formControlName="paymentTypeId">
<mat-option *ngFor="let paymentType of paymentTypes" [value]="paymentType.id">
{{ paymentType.name }}
</mat-option>
</mat-select>
</mat-form-field>
<div fxFlexFill>
<span fxFlex="25%">Show Payment Details</span>
<span fxFlex="75%" class="expandCollapsebutton" (click)="addPaymentDetails()">
<button mat-raised-button color="primary" *ngIf="showPaymentDetails">
<i class="fa fa-minus"></i>
</button>
<button mat-raised-button color="primary" *ngIf="!showPaymentDetails">
<i class="fa fa-plus"></i>
</button>
</span>
</div>
<ng-container *ngIf="showPaymentDetails">
<mat-form-field>
<mat-label> Account #</mat-label>
<input matInput formControlName="accountNumber">
</mat-form-field>
<mat-form-field>
<mat-label>Cheque #</mat-label>
<input matInput formControlName="checkNumber">
</mat-form-field>
<mat-form-field>
<mat-label>Routing Code</mat-label>
<input matInput formControlName="routingCode">
</mat-form-field>
<mat-form-field>
<mat-label>Reciept #</mat-label>
<input matInput formControlName="receiptNumber">
</mat-form-field>
<mat-form-field>
<mat-label>Bank #</mat-label>
<input matInput formControlName="bankNumber">
</mat-form-field>
</ng-container>
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
</mat-form-field>
<div fxFlexFill>
<span fxFlex="25%">Show Payment Details</span>
<span fxFlex="75%" class="expandCollapsebutton" (click)="addPaymentDetails()">
<button mat-raised-button color="primary" *ngIf="showPaymentDetails">
<i class="fa fa-minus"></i>
</button>
<button mat-raised-button color="primary" *ngIf="!showPaymentDetails">
<i class="fa fa-plus"></i>
</button>
</span>
</div> </div>
<ng-container *ngIf="showPaymentDetails"> <mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<mat-form-field> <button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<mat-label> Account #</mat-label> <button mat-raised-button color="primary" [disabled]="!recoveryRepaymentLoanForm.valid"
<input matInput formControlName="accountNumber"> *mifosxHasPermission="'REPAYMENT_LOAN'">Submit</button>
</mat-form-field> </mat-card-actions>
<mat-form-field> </mat-card-content>
<mat-label>Cheque #</mat-label>
<input matInput formControlName="checkNumber">
</mat-form-field>
<mat-form-field> </form>
<mat-label>Routing Code</mat-label>
<input matInput formControlName="routingCode">
</mat-form-field>
<mat-form-field> </mat-card>
<mat-label>Reciept #</mat-label>
<input matInput formControlName="receiptNumber">
</mat-form-field>
<mat-form-field>
<mat-label>Bank #</mat-label>
<input matInput formControlName="bankNumber">
</mat-form-field>
</ng-container>
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
</mat-form-field>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!recoveryRepaymentLoanForm.valid"
*mifosxHasPermission="'REPAYMENT_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
</div> </div>
@@ -1,3 +1,7 @@
.expandCollapsebutton { .expandCollapsebutton {
margin-top: -7px; margin-top: -7px;
} }
.container {
max-width: 37rem;
}
@@ -1,35 +1,41 @@
<div class="container"> <div class="container">
<form [formGroup]="rejectLoanForm" (ngSubmit)="submit()"> <mat-card>
<mat-card-content> <form [formGroup]="rejectLoanForm" (ngSubmit)="submit()">
<div fxLayout="column"> <mat-card-content>
<mat-form-field> <div fxLayout="column">
<mat-label>Rejected On</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="rejectedDatePicker" required formControlName="rejectedOnDate">
<mat-datepicker-toggle matSuffix [for]="rejectedDatePicker"></mat-datepicker-toggle>
<mat-datepicker #rejectedDatePicker></mat-datepicker>
<mat-error *ngIf="rejectLoanForm.controls.rejectedOnDate.hasError('required')">
Rejected Date <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Note</mat-label> <mat-label>Rejected On</mat-label>
<textarea matInput formControlName="note"></textarea> <input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="rejectedDatePicker" required
</mat-form-field> formControlName="rejectedOnDate">
<mat-datepicker-toggle matSuffix [for]="rejectedDatePicker"></mat-datepicker-toggle>
<mat-datepicker #rejectedDatePicker></mat-datepicker>
<mat-error *ngIf="rejectLoanForm.controls.rejectedOnDate.hasError('required')">
Rejected Date <strong>is required</strong>
</mat-error>
</mat-form-field>
</div> <mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
</mat-form-field>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px"> </div>
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!rejectLoanForm.valid" *mifosxHasPermission="'REJECT_LOAN'" >Submit</button>
</mat-card-actions>
</mat-card-content> <mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!rejectLoanForm.valid"
*mifosxHasPermission="'REJECT_LOAN'">Submit</button>
</mat-card-actions>
</form> </mat-card-content>
</form>
</mat-card>
</div> </div>
@@ -1,17 +1,22 @@
<div class="container"> <div class="container">
<mat-card-content> <mat-card>
<mat-form-field fxLayoutAlign="center"> <mat-card-content>
<mat-label>Note</mat-label>
<textarea matInput [formControl]="note"></textarea> <mat-form-field fxFlex>
</mat-form-field> <mat-label>Note</mat-label>
<textarea matInput [formControl]="note"></textarea>
</mat-form-field>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px"> <mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button> <button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" (click)="submit()" *mifosxHasPermission="'APPROVALUNDO_LOAN'">Submit</button> <button mat-raised-button color="primary" (click)="submit()"
*mifosxHasPermission="'APPROVALUNDO_LOAN'">Submit</button>
</mat-card-actions> </mat-card-actions>
</mat-card-content> </mat-card>
</div> </div>
@@ -0,0 +1,3 @@
.container {
max-width: 37rem;
}
@@ -1,17 +1,22 @@
<div class="container"> <div class="container">
<mat-card-content> <mat-card>
<mat-form-field fxLayoutAlign="center"> <mat-card-content>
<mat-label>Note</mat-label>
<textarea matInput [formControl]="note"></textarea> <mat-form-field fxFlex>
</mat-form-field> <mat-label>Note</mat-label>
<textarea matInput [formControl]="note"></textarea>
</mat-form-field>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px"> <mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button> <button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" (click)="submit()" *mifosxHasPermission="'DISBURSALUNDO_LOAN'">Submit</button> <button mat-raised-button color="primary" (click)="submit()"
*mifosxHasPermission="'DISBURSALUNDO_LOAN'">Submit</button>
</mat-card-actions> </mat-card-actions>
</mat-card-content> </mat-card>
</div> </div>
@@ -0,0 +1,3 @@
.container {
max-width: 37rem;
}
@@ -1,174 +1,186 @@
<div class="viewGuarantors-account-tables" fxLayout="row" fxLayoutGap="2%"> <div class="container">
<div fxFlex="49%"> <mat-card>
<table>
<tbody>
<tr>
<td>Disbursement Date</td>
<td>{{dataObject.timeline.actualDisbursementDate}}<span
*ngIf="!dataObject.timeline.actualDisbursementDate">Not Available</span></td>
</tr>
<tr>
<td>Currency</td>
<td>{{dataObject.currency.name}}</td>
</tr>
<tr>
<td>Loan Officer</td>
<td>{{dataObject.loanOfficerName}} <span *ngIf="!dataObject.loanOfficerName">Unassigned</span>
<span *ngIf="dataObject.loanOfficerName">
<fa-icon icon="times"></fa-icon>
</span></td>
</tr>
<tr>
<td>External Id</td>
<td>{{dataObject.externalId}}</td>
</tr>
</tbody>
</table>
</div>
<div fxFlex="49%"> <div class="viewGuarantors-account-tables" fxLayout="row" fxLayoutGap="2%">
<table>
<tbody>
<tr>
<td>Loan Purpose</td>
<td>
{{dataObject.loanPurposeName}} <span *ngIf="!dataObject.loanPurposeName"> Not Provided </span>
</td>
</tr>
<tr>
<td>Approved Amount</td>
<td>
<span>{{dataObject.approvedPrincipal | number}}</span>
</td>
</tr>
<tr>
<td>Disburse Amount</td>
<td>
<span>{{dataObject.principal | number}}</span>
</td>
</tr>
<tr>
<td>Arrears By</td>
<td>{{dataObject.summary.totalOverdue | number}}
<span *ngIf="dataObject.summary.totalOverdue < 0">Not Provided</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div fxFlexFill *ngIf="guarantorDetails" fxLayout="row wrap" fxLayout.lt-md="column"> <div fxFlex="49%">
<table>
<tbody>
<tr>
<td>Disbursement Date</td>
<td>{{dataObject.timeline.actualDisbursementDate}}<span
*ngIf="!dataObject.timeline.actualDisbursementDate">Not Available</span></td>
</tr>
<tr>
<td>Currency</td>
<td>{{dataObject.currency.name}}</td>
</tr>
<tr>
<td>Loan Officer</td>
<td>{{dataObject.loanOfficerName}} <span *ngIf="!dataObject.loanOfficerName">Unassigned</span>
<span *ngIf="dataObject.loanOfficerName">
<fa-icon icon="times"></fa-icon>
</span></td>
</tr>
<tr>
<td>External Id</td>
<td>{{dataObject.externalId}}</td>
</tr>
</tbody>
</table>
</div>
<!-- guarantors details table --> <div fxFlex="49%">
<div class="headingContent"> <table>
<div fxLayout="column" fxFlex="50%"> <tbody>
<div class="headingName"> <tr>
<h3>Guarantors Details</h3> <td>Loan Purpose</td>
<td>
{{dataObject.loanPurposeName}} <span *ngIf="!dataObject.loanPurposeName"> Not Provided </span>
</td>
</tr>
<tr>
<td>Approved Amount</td>
<td>
<span>{{dataObject.approvedPrincipal | number}}</span>
</td>
</tr>
<tr>
<td>Disburse Amount</td>
<td>
<span>{{dataObject.principal | number}}</span>
</td>
</tr>
<tr>
<td>Arrears By</td>
<td>{{dataObject.summary.totalOverdue | number}}
<span *ngIf="dataObject.summary.totalOverdue < 0">Not Provided</span>
</td>
</tr>
</tbody>
</table>
</div> </div>
</div> </div>
<div fxLayout="column" fxFlex="50%">
<div fxLayout="row" fxLayoutAlign="flex-end"> <div fxFlexFill *ngIf="guarantorDetails" fxLayout="row wrap" fxLayout.lt-md="column">
<button mat-raised-button class="f-right" color="primary"
(click)="toggleGuarantorsDetailsOverview()">{{showDeletedGuarantorsAccounts?'Hide Deleted Guarantors':'Show Deleted Guarantors'}}</button> <!-- guarantors details table -->
<div class="headingContent">
<div fxLayout="column" fxFlex="50%">
<div class="headingName">
<h3>Guarantors Details</h3>
</div>
</div>
<div fxLayout="column" fxFlex="50%">
<div fxLayout="row" fxLayoutAlign="flex-end">
<button mat-raised-button class="f-right" color="primary"
(click)="toggleGuarantorsDetailsOverview()">{{showDeletedGuarantorsAccounts?'Hide Deleted Guarantors':'Show Deleted Guarantors'}}</button>
</div>
</div>
</div> </div>
<table fxFlexFill mat-table
[dataSource]="guarantorDetails|accountsFilter:'guarantor':showDeletedGuarantorsAccounts">
<!-- <ng-container *ngIf="expression"> -->
<ng-container matColumnDef="fullname">
<th mat-header-cell *matHeaderCellDef> Name </th>
<td mat-cell *matCellDef="let guarantor">
<span *ngIf="!guarantor.guarantorFundingDetails">
{{guarantor.firstname}} &nbsp; {{guarantor.lastname}}
</span>
</td>
</ng-container>
<ng-container matColumnDef="relationship">
<th mat-header-cell *matHeaderCellDef> Relationship </th>
<td mat-cell *matCellDef="let guarantor">
<span *ngIf="!guarantor.guarantorFundingDetails">
{{guarantor.clientRelationshipType.name}}
</span>
</td>
</ng-container>
<ng-container matColumnDef="guarantortype">
<th mat-header-cell *matHeaderCellDef> Guarantor Type </th>
<td mat-cell *matCellDef="let guarantor">
<span *ngIf="!guarantor.guarantorFundingDetails">
{{guarantor.guarantorType.value}}
</span>
</td>
</ng-container>
<ng-container matColumnDef="depositAccount">
<th mat-header-cell *matHeaderCellDef> Deposit Account </th>
<td mat-cell *matCellDef="let guarantor">
<span *ngIf="!guarantor.guarantorFundingDetails">
</span>
</td>
</ng-container>
<ng-container matColumnDef="amount">
<th mat-header-cell *matHeaderCellDef> Amount </th>
<td mat-cell *matCellDef="let guarantor">
<span *ngIf="!guarantor.guarantorFundingDetails">
</span>
</td>
</ng-container>
<ng-container matColumnDef="remainingAmount">
<th mat-header-cell *matHeaderCellDef> Remaining Amount </th>
<td mat-cell *matCellDef="let guarantor">
<span *ngIf="!guarantor.guarantorFundingDetails">
</span>
</td>
</ng-container>
<ng-container matColumnDef="status">
<th mat-header-cell *matHeaderCellDef> Status </th>
<td mat-cell *matCellDef="let guarantor">
<span *ngIf="!guarantor.guarantorFundingDetails">
<span *ngIf="guarantor.status">
Active
</span>
<span *ngIf="!guarantor.status">
Deleted
</span>
</span>
</td>
</ng-container>
<ng-container matColumnDef="action">
<th mat-header-cell *matHeaderCellDef> Action </th>
<td mat-cell *matCellDef="let guarantor; let id = index">
<span *ngIf="!guarantor.guarantorFundingDetails">
<button mat-raised-button class="account-action-button" color="primary"
*mifosxHasPermission="'READ_SAVINGSACCOUNT'" (click)="viewGuarantorDetails(guarantor)">
<fa-icon icon="eye"></fa-icon>&nbsp;&nbsp;
</button>
<button mat-raised-button class="account-action-button" color="primary"
*ngIf="guarantor.status && guarantor.guarantorType.id == 3 && guarantor.id">
<fa-icon icon="edit"></fa-icon>&nbsp;&nbsp;
</button>
<span *ngIf="guarantor.status">
<button mat-raised-button class="account-action-button" color="warn"
*mifosxHasPermission='"DELETE_GUARANTOR"' (click)="deleteGuarantor(guarantor.id)">
<fa-icon icon="trash"></fa-icon>&nbsp;&nbsp;
</button>
</span>
</span>
</td>
</ng-container>
<!-- </ng-container> -->
<tr mat-header-row *matHeaderRowDef="guarantorsDisplayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: guarantorsDisplayedColumns"></tr>
</table>
</div> </div>
</div>
<table fxFlexFill mat-table [dataSource]="guarantorDetails|accountsFilter:'guarantor':showDeletedGuarantorsAccounts"> </mat-card>
<!-- <ng-container *ngIf="expression"> -->
<ng-container matColumnDef="fullname">
<th mat-header-cell *matHeaderCellDef> Name </th>
<td mat-cell *matCellDef="let guarantor">
<span *ngIf="!guarantor.guarantorFundingDetails">
{{guarantor.firstname}} &nbsp; {{guarantor.lastname}}
</span>
</td>
</ng-container>
<ng-container matColumnDef="relationship">
<th mat-header-cell *matHeaderCellDef> Relationship </th>
<td mat-cell *matCellDef="let guarantor">
<span *ngIf="!guarantor.guarantorFundingDetails">
{{guarantor.clientRelationshipType.name}}
</span>
</td>
</ng-container>
<ng-container matColumnDef="guarantortype">
<th mat-header-cell *matHeaderCellDef> Guarantor Type </th>
<td mat-cell *matCellDef="let guarantor">
<span *ngIf="!guarantor.guarantorFundingDetails">
{{guarantor.guarantorType.value}}
</span>
</td>
</ng-container>
<ng-container matColumnDef="depositAccount">
<th mat-header-cell *matHeaderCellDef> Deposit Account </th>
<td mat-cell *matCellDef="let guarantor">
<span *ngIf="!guarantor.guarantorFundingDetails">
</span>
</td>
</ng-container>
<ng-container matColumnDef="amount">
<th mat-header-cell *matHeaderCellDef> Amount </th>
<td mat-cell *matCellDef="let guarantor">
<span *ngIf="!guarantor.guarantorFundingDetails">
</span>
</td>
</ng-container>
<ng-container matColumnDef="remainingAmount">
<th mat-header-cell *matHeaderCellDef> Remaining Amount </th>
<td mat-cell *matCellDef="let guarantor">
<span *ngIf="!guarantor.guarantorFundingDetails">
</span>
</td>
</ng-container>
<ng-container matColumnDef="status">
<th mat-header-cell *matHeaderCellDef> Status </th>
<td mat-cell *matCellDef="let guarantor">
<span *ngIf="!guarantor.guarantorFundingDetails">
<span *ngIf="guarantor.status">
Active
</span>
<span *ngIf="!guarantor.status">
Deleted
</span>
</span>
</td>
</ng-container>
<ng-container matColumnDef="action">
<th mat-header-cell *matHeaderCellDef> Action </th>
<td mat-cell *matCellDef="let guarantor; let id = index">
<span *ngIf="!guarantor.guarantorFundingDetails">
<button mat-raised-button class="account-action-button" color="primary" *mifosxHasPermission="'READ_SAVINGSACCOUNT'" (click)="viewGuarantorDetails(guarantor)">
<fa-icon icon="eye"></fa-icon>&nbsp;&nbsp;
</button>
<button mat-raised-button class="account-action-button" color="primary" *ngIf="guarantor.status && guarantor.guarantorType.id == 3 && guarantor.id">
<fa-icon icon="edit"></fa-icon>&nbsp;&nbsp;
</button>
<span *ngIf="guarantor.status">
<button mat-raised-button class="account-action-button" color="warn" *mifosxHasPermission='"DELETE_GUARANTOR"' (click)="deleteGuarantor(guarantor.id)">
<fa-icon icon="trash" ></fa-icon>&nbsp;&nbsp;
</button>
</span>
</span>
</td>
</ng-container>
<!-- </ng-container> -->
<tr mat-header-row *matHeaderRowDef="guarantorsDisplayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: guarantorsDisplayedColumns"></tr>
</table>
</div> </div>
@@ -29,3 +29,7 @@ table {
.headingName { .headingName {
display: block; display: block;
} }
.container {
max-width: 73rem;
}
@@ -76,7 +76,7 @@ export class ViewGuarantorsComponent implements OnInit {
private reload() { private reload() {
const clientId = this.dataObject.clientId; const clientId = this.dataObject.clientId;
const url: string = this.router.url; const url: string = this.router.url;
this.router.navigateByUrl(`/clients/${clientId}/loans`, { skipLocationChange: true }) this.router.navigateByUrl(`/clients/${clientId}/loans-accounts`, { skipLocationChange: true })
.then(() => this.router.navigate([url])); .then(() => this.router.navigate([url]));
} }
@@ -1,43 +1,49 @@
<div class="container"> <div class="container">
<form [formGroup]="loanInterestForm" (ngSubmit)="submit()"> <mat-card>
<mat-card-content> <form [formGroup]="loanInterestForm" (ngSubmit)="submit()">
<div fxLayout="column"> <mat-card-content>
<mat-form-field> <div fxLayout="column">
<mat-label>Interest waived on</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="interestDatePicker" required formControlName="transactionDate">
<mat-datepicker-toggle matSuffix [for]="interestDatePicker"></mat-datepicker-toggle>
<mat-datepicker #interestDatePicker></mat-datepicker>
<mat-error *ngIf="loanInterestForm.controls.transactionDate.hasError('required')">
Interest Date is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>Transaction amount</mat-label>
<input matInput required formControlName="transactionAmount">
<mat-error *ngIf="loanInterestForm.controls.transactionAmount.hasError('required')">
Transaction Amount is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
</mat-form-field>
</div> <mat-form-field>
<mat-label>Interest waived on</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="interestDatePicker" required
formControlName="transactionDate">
<mat-datepicker-toggle matSuffix [for]="interestDatePicker"></mat-datepicker-toggle>
<mat-datepicker #interestDatePicker></mat-datepicker>
<mat-error *ngIf="loanInterestForm.controls.transactionDate.hasError('required')">
Interest Date is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px"> <mat-form-field>
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button> <mat-label>Transaction amount</mat-label>
<button mat-raised-button color="primary" [disabled]="!loanInterestForm.valid" *mifosxHasPermission="'WAIVEINTERESTPORTION_LOAN'">Submit</button> <input matInput required formControlName="transactionAmount">
</mat-card-actions> <mat-error *ngIf="loanInterestForm.controls.transactionAmount.hasError('required')">
Transaction Amount is <strong>required</strong>
</mat-error>
</mat-form-field>
</mat-card-content> <mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
</mat-form-field>
</form> </div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!loanInterestForm.valid"
*mifosxHasPermission="'WAIVEINTERESTPORTION_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div> </div>
@@ -0,0 +1,3 @@
.container {
max-width: 37rem;
}
@@ -1,35 +1,41 @@
<div class="container"> <div class="container">
<form [formGroup]="withdrawnByClientLoanForm" (ngSubmit)="submit()"> <mat-card>
<mat-card-content> <form [formGroup]="withdrawnByClientLoanForm" (ngSubmit)="submit()">
<div fxLayout="column"> <mat-card-content>
<mat-form-field> <div fxLayout="column">
<mat-label>Withdrawn On</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="withdrawnOnDatePicker" required formControlName="withdrawnOnDate">
<mat-datepicker-toggle matSuffix [for]="withdrawnOnDatePicker"></mat-datepicker-toggle>
<mat-datepicker #withdrawnOnDatePicker></mat-datepicker>
<mat-error *ngIf="withdrawnByClientLoanForm.controls.withdrawnOnDate.hasError('required')">
Withdrawn On Date <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label>Note</mat-label> <mat-label>Withdrawn On</mat-label>
<textarea matInput formControlName="note"></textarea> <input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="withdrawnOnDatePicker" required
</mat-form-field> formControlName="withdrawnOnDate">
<mat-datepicker-toggle matSuffix [for]="withdrawnOnDatePicker"></mat-datepicker-toggle>
<mat-datepicker #withdrawnOnDatePicker></mat-datepicker>
<mat-error *ngIf="withdrawnByClientLoanForm.controls.withdrawnOnDate.hasError('required')">
Withdrawn On Date <strong>is required</strong>
</mat-error>
</mat-form-field>
</div> <mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
</mat-form-field>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px"> </div>
<button type="button" mat-raised-button [routerLink]="['../../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!withdrawnByClientLoanForm.valid" *mifosxHasPermission="'WITHDRAW_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content> <mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!withdrawnByClientLoanForm.valid"
*mifosxHasPermission="'WITHDRAW_LOAN'">Submit</button>
</mat-card-actions>
</form> </mat-card-content>
</form>
</mat-card>
</div> </div>
@@ -0,0 +1,3 @@
.container {
max-width: 37rem;
}
@@ -1,40 +1,46 @@
<div class="container"> <div class="container">
<mat-card-content> <mat-card>
<form [formGroup]="writeOffForm" (ngSubmit)="submit()"> <mat-card-content>
<div fxLayout="column"> <form [formGroup]="writeOffForm" (ngSubmit)="submit()">
<mat-form-field> <div fxLayout="column">
<mat-label>Write off on</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="writeOffDatePicker" required formControlName="transactionDate">
<mat-datepicker-toggle matSuffix [for]="writeOffDatePicker"></mat-datepicker-toggle>
<mat-datepicker #writeOffDatePicker></mat-datepicker>
<mat-error *ngIf="writeOffForm.controls.transactionDate.hasError('required')">
Write Off Date <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>Amount</mat-label>
<input matInput formControlName="amount">
</mat-form-field>
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
</mat-form-field>
</div>
</form> <mat-form-field>
<mat-label>Write off on</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="writeOffDatePicker" required
formControlName="transactionDate">
<mat-datepicker-toggle matSuffix [for]="writeOffDatePicker"></mat-datepicker-toggle>
<mat-datepicker #writeOffDatePicker></mat-datepicker>
<mat-error *ngIf="writeOffForm.controls.transactionDate.hasError('required')">
Write Off Date <strong>is required</strong>
</mat-error>
</mat-form-field>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px"> <mat-form-field>
<button type="button" mat-raised-button [routerLink]="['../../']">Cancel</button> <mat-label>Amount</mat-label>
<button mat-raised-button color="primary" (click)="submit()" *mifosxHasPermission="'WRITEOFF_LOAN'">Submit</button> <input matInput formControlName="amount">
</mat-card-actions> </mat-form-field>
</mat-card-content> <mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
</mat-form-field>
</div>
</form>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" (click)="submit()"
*mifosxHasPermission="'WRITEOFF_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</mat-card>
</div> </div>
@@ -0,0 +1,3 @@
.container {
max-width: 37rem;
}
@@ -18,8 +18,8 @@ export class LoanCollateralTabComponent implements OnInit {
* @param {ActivatedRoute} route Activated Route. * @param {ActivatedRoute} route Activated Route.
*/ */
constructor(private route: ActivatedRoute) { constructor(private route: ActivatedRoute) {
this.route.data.subscribe((data: { loanDetailsAssociationData: any }) => { this.route.parent.data.subscribe((data: { loanDetailsData: any }) => {
this.loanDetails = data.loanDetailsAssociationData; this.loanDetails = data.loanDetailsData;
}); });
} }
@@ -51,8 +51,10 @@ export class LoanDocumentsTabComponent implements OnInit {
constructor(private route: ActivatedRoute, constructor(private route: ActivatedRoute,
private loansService: LoansService, private loansService: LoansService,
public dialog: MatDialog) { public dialog: MatDialog) {
this.route.data.subscribe((data: { loanDocuments: any, loanDetailsData: any }) => { this.route.data.subscribe((data: { loanDocuments: any }) => {
this.getLoanDocumentsData(data.loanDocuments); this.getLoanDocumentsData(data.loanDocuments);
});
this.route.parent.data.subscribe((data: { loanDetailsData: any }) => {
this.loanDetailsData = data.loanDetailsData; this.loanDetailsData = data.loanDetailsData;
}); });
} }
@@ -20,8 +20,8 @@ export class LoanTrancheDetailsComponent implements OnInit {
* @param {ActivatedRoute} route Activated Route. * @param {ActivatedRoute} route Activated Route.
*/ */
constructor(private route: ActivatedRoute) { constructor(private route: ActivatedRoute) {
this.route.data.subscribe((data: { loanDetailsAssociationData: any }) => { this.route.parent.data.subscribe((data: { loanDetailsData: any }) => {
this.loanDetails = data.loanDetailsAssociationData; this.loanDetails = data.loanDetailsData;
}); });
} }
@@ -132,9 +132,6 @@ export class LoansViewComponent implements OnInit {
this.router.navigate(['transfer-funds/make-account-transfer'], { relativeTo: this.route, queryParams: queryParams }); this.router.navigate(['transfer-funds/make-account-transfer'], { relativeTo: this.route, queryParams: queryParams });
break; break;
default: default:
button = button.replace(/\s/g, '-').toLowerCase();
button = button.replace(/\(/g, '');
button = button.replace(/\)/g, '');
this.router.navigate(['actions', button], { relativeTo: this.route }); this.router.navigate(['actions', button], { relativeTo: this.route });
break; break;
} }
@@ -179,7 +176,7 @@ export class LoansViewComponent implements OnInit {
private reload() { private reload() {
const clientId = this.clientId; const clientId = this.clientId;
const url: string = this.router.url; const url: string = this.router.url;
this.router.navigateByUrl(`/clients/${clientId}/loans`, { skipLocationChange: true }) this.router.navigateByUrl(`/clients/${clientId}/loans-accounts`, { skipLocationChange: true })
.then(() => this.router.navigate([url])); .then(() => this.router.navigate([url]));
} }
@@ -18,8 +18,8 @@ export class OriginalScheduleTabComponent implements OnInit {
* @param {ActivatedRoute} route Activated Route. * @param {ActivatedRoute} route Activated Route.
*/ */
constructor(private route: ActivatedRoute) { constructor(private route: ActivatedRoute) {
this.route.data.subscribe(( data: { loanDetailsAssociationData: any }) => { this.route.parent.data.subscribe((data: { loanDetailsData: any }) => {
this.originalScheduleDetails = data.loanDetailsAssociationData.originalSchedule; this.originalScheduleDetails = data.loanDetailsData.originalSchedule;
}); });
} }
@@ -20,8 +20,8 @@ export class RepaymentScheduleTabComponent implements OnInit {
* @param {ActivatedRoute} route Activated Route. * @param {ActivatedRoute} route Activated Route.
*/ */
constructor(private route: ActivatedRoute) { constructor(private route: ActivatedRoute) {
this.route.data.subscribe(( data: { loanDetailsAssociationData: any }) => { this.route.parent.data.subscribe((data: { loanDetailsData: any }) => {
this.repaymentScheduleDetails = data.loanDetailsAssociationData.repaymentSchedule; this.repaymentScheduleDetails = data.loanDetailsData.repaymentSchedule;
}); });
} }
@@ -65,7 +65,7 @@
<ng-container matColumnDef="actions"> <ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef> Actions </th> <th mat-header-cell *matHeaderCellDef> Actions </th>
<td mat-cell *matCellDef="let transaction" [ngClass]="{'strike': transaction.manuallyReversed}"> <td mat-cell *matCellDef="let transaction" [ngClass]="{'strike': transaction.manuallyReversed}">
<button class="account-action-button" *ngIf="!transaction.manuallyReversedession" mat-raised-button color="primary" (click)="routeEdit($event)" <button class="account-action-button" *ngIf="!transaction.manuallyReversed" mat-raised-button color="primary" (click)="routeEdit($event)"
[routerLink]="[transaction.id, 'reciept']" matTooltip="View Receipts"> [routerLink]="[transaction.id, 'reciept']" matTooltip="View Receipts">
<i class="fa fa-file-text"></i> <i class="fa fa-file-text"></i>
</button> </button>
@@ -28,10 +28,10 @@ export class TransactionsTabComponent implements OnInit {
*/ */
constructor(private route: ActivatedRoute, constructor(private route: ActivatedRoute,
private router: Router) { private router: Router) {
this.route.parent.data.subscribe(( data: { loanDetailsAssociationData: any }) => { this.route.parent.parent.data.subscribe((data: { loanDetailsData: any }) => {
this.transactions = data.loanDetailsAssociationData.transactions; this.transactions = data.loanDetailsData.transactions;
this.tempTransaction = data.loanDetailsAssociationData.transactions; this.tempTransaction = data.loanDetailsData.transactions;
this.status = data.loanDetailsAssociationData.status.value; this.status = data.loanDetailsData.status.value;
}); });
} }
@@ -44,8 +44,8 @@ export class ExportTransactionsComponent implements OnInit {
private formBuilder: FormBuilder, private formBuilder: FormBuilder,
private datePipe: DatePipe, private datePipe: DatePipe,
private route: ActivatedRoute) { private route: ActivatedRoute) {
this.route.parent.data.subscribe((data: { loanDetailsAssociationData: any }) => { this.route.parent.parent.data.subscribe((data: { loanDetailsData: any }) => {
this.loansAccountId = data.loanDetailsAssociationData.accountNo; this.loansAccountId = data.loanDetailsData.accountNo;
}); });
} }
@@ -1,7 +1,7 @@
<mat-card class="container"> <mat-card class="container">
<div class="back-button"> <div class="back-button">
<button type="button" color="primary" mat-raised-button [routerLink]="['../../']"> <button type="button" color="primary" mat-raised-button [routerLink]="['../../../general']">
<fa-icon icon="arrow-left"></fa-icon>&nbsp;&nbsp;Back</button> <fa-icon icon="arrow-left"></fa-icon>&nbsp;&nbsp;Back</button>
</div> </div>
@@ -1,6 +1,5 @@
.container { .container {
max-width: 37rem; max-width: 37rem;
padding-bottom: 2%;
.content { .content {
div { div {
margin: 1rem 0; margin: 1rem 0;
@@ -45,10 +45,8 @@ export class ViewChargeComponent {
private datePipe: DatePipe, private datePipe: DatePipe,
private router: Router, private router: Router,
public dialog: MatDialog) { public dialog: MatDialog) {
this.route.data.subscribe((data: { loansAccountCharge: any }) => { this.route.data.subscribe((data: { loansAccountCharge: any, loanDetailsData: any }) => {
this.chargeData = data.loansAccountCharge; this.chargeData = data.loansAccountCharge;
});
this.route.parent.parent.data.subscribe((data: { loanDetailsData: any }) => {
this.loansAccountData = data.loanDetailsData; this.loansAccountData = data.loanDetailsData;
}); });
} }
-2
View File
@@ -64,7 +64,6 @@ import { EditTransactionComponent } from './loans-view/transactions/edit-transac
/** Dialog Components */ /** Dialog Components */
import { LoansAccountViewGuarantorDetailsDialogComponent } from './custom-dialog/loans-account-view-guarantor-details-dialog/loans-account-view-guarantor-details-dialog.component'; import { LoansAccountViewGuarantorDetailsDialogComponent } from './custom-dialog/loans-account-view-guarantor-details-dialog/loans-account-view-guarantor-details-dialog.component';
import { LoansAccountAddCollateralDialogComponent } from './custom-dialog/loans-account-add-collateral-dialog/loans-account-add-collateral-dialog.component'; import { LoansAccountAddCollateralDialogComponent } from './custom-dialog/loans-account-add-collateral-dialog/loans-account-add-collateral-dialog.component';
import { LoansConfirmationDialogBoxComponent } from './custom-dialog/loans-confirmation-dialog-box/loans-confirmation-dialog-box.component';
import { LoanAccountLoadDocumentsDialogComponent } from './custom-dialog/loan-account-load-documents-dialog/loan-account-load-documents-dialog.component'; import { LoanAccountLoadDocumentsDialogComponent } from './custom-dialog/loan-account-load-documents-dialog/loan-account-load-documents-dialog.component';
/** /**
@@ -112,7 +111,6 @@ import { LoanAccountLoadDocumentsDialogComponent } from './custom-dialog/loan-ac
ViewGuarantorsComponent, ViewGuarantorsComponent,
CreateGuarantorComponent, CreateGuarantorComponent,
LoansAccountViewGuarantorDetailsDialogComponent, LoansAccountViewGuarantorDetailsDialogComponent,
LoansConfirmationDialogBoxComponent,
DisburseLoanAccountComponent, DisburseLoanAccountComponent,
RejectLoanComponent, RejectLoanComponent,
DisburseComponent, DisburseComponent,
@@ -29,7 +29,7 @@ export class NotificationsPageComponent implements OnInit {
routeMap: any = { routeMap: any = {
'client' : '/clients/', 'client' : '/clients/',
'group' : '/groups/', 'group' : '/groups/',
'loan' : '/loans/', 'loan': '/loans-accounts/',
'center' : '/centers/', 'center' : '/centers/',
'shareAccount' : '/shares-accounts/', 'shareAccount' : '/shares-accounts/',
'fixedDeposit' : '/fixed-deposits-accounts/', 'fixedDeposit' : '/fixed-deposits-accounts/',
@@ -54,7 +54,7 @@ export class SearchPageComponent {
this.router.navigate(['clients', entity.parentId, 'savings-accounts', entity.entityId]); this.router.navigate(['clients', entity.parentId, 'savings-accounts', entity.entityId]);
break; break;
case 'LOAN': case 'LOAN':
this.router.navigate(['clients', entity.parentId, 'loans', entity.entityId]); this.router.navigate(['clients', entity.parentId, 'loans-accounts', entity.entityId]);
break; break;
} }
} }
@@ -34,7 +34,7 @@ export class NotificationsTrayComponent implements OnInit, OnDestroy {
routeMap: any = { routeMap: any = {
'client' : '/clients/', 'client' : '/clients/',
'group' : '/groups/', 'group' : '/groups/',
'loan' : '/loans/', 'loan': '/loans-accounts/',
'center' : '/centers/', 'center' : '/centers/',
'shareAccount' : '/shares-accounts/', 'shareAccount' : '/shares-accounts/',
'fixedDeposit' : '/fixed-deposits-accounts/', 'fixedDeposit' : '/fixed-deposits-accounts/',
@@ -43,7 +43,7 @@
<ng-container matColumnDef="loan"> <ng-container matColumnDef="loan">
<th mat-header-cell *matHeaderCellDef> Loan </th> <th mat-header-cell *matHeaderCellDef> Loan </th>
<td mat-cell *matCellDef="let loan" class="view-details" [routerLink]="['../../clients', loan.clientId, 'loans', 'loan.id']"> <td mat-cell *matCellDef="let loan" class="view-details" [routerLink]="['../../clients', loan.clientId, 'loans-accounts', 'loan.id']">
{{ loan.loanProductName}}({{loan.accountNo}}) </td> {{ loan.loanProductName}}({{loan.accountNo}}) </td>
</ng-container> </ng-container>
@@ -35,12 +35,12 @@
<ng-container matColumnDef="loanAccountNumber"> <ng-container matColumnDef="loanAccountNumber">
<th mat-header-cell *matHeaderCellDef> Loan Account# </th> <th mat-header-cell *matHeaderCellDef> Loan Account# </th>
<td mat-cell *matCellDef="let loan" class="view-details" [routerLink]="['../../clients', loan.clientId, 'loans', loan.id, 'general']"> {{loan.accountNo}} </td> <td mat-cell *matCellDef="let loan" class="view-details" [routerLink]="['../../clients', loan.clientId, 'loans-accounts', loan.id, 'general']"> {{loan.accountNo}} </td>
</ng-container> </ng-container>
<ng-container matColumnDef="loanProduct"> <ng-container matColumnDef="loanProduct">
<th mat-header-cell *matHeaderCellDef> Loan Product </th> <th mat-header-cell *matHeaderCellDef> Loan Product </th>
<td mat-cell *matCellDef="let loan" class="view-details" [routerLink]="['../../clients', loan.clientId, 'loans', loan.id, 'general']"> {{loan.loanProductName}} </td> <td mat-cell *matCellDef="let loan" class="view-details" [routerLink]="['../../clients', loan.clientId, 'loans-accounts', loan.id, 'general']"> {{loan.loanProductName}} </td>
</ng-container> </ng-container>
<ng-container matColumnDef="principal"> <ng-container matColumnDef="principal">