From ac529dbae88c930a8f02ae598f7d3264616e2405 Mon Sep 17 00:00:00 2001 From: Benura Abeywardena <43112139+BLasan@users.noreply.github.com> Date: Sun, 12 Jul 2020 17:21:39 +0530 Subject: [PATCH] feat: add loan action (add collateral) (#842) Fixes: #831 --- .../loan-action-button.resolver.ts | 2 + src/app/loans/loans-routing.module.ts | 1 + .../add-collateral.component.html | 44 ++++++++++++ .../add-collateral.component.scss | 3 + .../add-collateral.component.spec.ts | 25 +++++++ .../add-collateral.component.ts | 69 +++++++++++++++++++ .../loan-account-actions.component.html | 1 + .../loan-account-actions.component.ts | 2 + src/app/loans/loans.module.ts | 2 + src/app/loans/loans.service.ts | 21 +++++- 10 files changed, 169 insertions(+), 1 deletion(-) create mode 100644 src/app/loans/loans-view/loan-account-actions/add-collateral/add-collateral.component.html create mode 100644 src/app/loans/loans-view/loan-account-actions/add-collateral/add-collateral.component.scss create mode 100644 src/app/loans/loans-view/loan-account-actions/add-collateral/add-collateral.component.spec.ts create mode 100644 src/app/loans/loans-view/loan-account-actions/add-collateral/add-collateral.component.ts diff --git a/src/app/loans/common-resolvers/loan-action-button.resolver.ts b/src/app/loans/common-resolvers/loan-action-button.resolver.ts index 842e4b52b..f7146beb5 100644 --- a/src/app/loans/common-resolvers/loan-action-button.resolver.ts +++ b/src/app/loans/common-resolvers/loan-action-button.resolver.ts @@ -42,6 +42,8 @@ export class LoanActionButtonResolver implements Resolve { return this.loansService.rescheduleLoanTemplate(); } else if (loanActionButton === 'prepay-loan') { return this.loansService.getLoanActionTemplate(loanId, 'prepayLoan'); + } else if (loanActionButton === 'add-collateral') { + return this.loansService.getLoanCollateralTemplate(loanId); } else if (loanActionButton === 'disburse-to-savings') { return this.loansService.getLoanActionTemplate(loanId, 'disburseToSavings'); } else if (loanActionButton === 'recovery-payment') { diff --git a/src/app/loans/loans-routing.module.ts b/src/app/loans/loans-routing.module.ts index 4a8fc2705..b66d18e4c 100644 --- a/src/app/loans/loans-routing.module.ts +++ b/src/app/loans/loans-routing.module.ts @@ -35,6 +35,7 @@ import { LoanDatatableResolver } from './common-resolvers/loan-datatable.resolve import { LoanActionButtonResolver } from './common-resolvers/loan-action-button.resolver'; import { LoansAccountTemplateResolver } from './common-resolvers/loans-account-template.resolver'; +/** Loans Route. */ const routes: Routes = [ { path: '', diff --git a/src/app/loans/loans-view/loan-account-actions/add-collateral/add-collateral.component.html b/src/app/loans/loans-view/loan-account-actions/add-collateral/add-collateral.component.html new file mode 100644 index 000000000..87e6d3a57 --- /dev/null +++ b/src/app/loans/loans-view/loan-account-actions/add-collateral/add-collateral.component.html @@ -0,0 +1,44 @@ +
+ +
+ + + +
+ + + Collateral Type + + {{ collateral.name }} + + + Collateral type required + + + + + Value + + + Value is required + + + + + Description + + + + +
+ + + + + + +
+ +
+ +
diff --git a/src/app/loans/loans-view/loan-account-actions/add-collateral/add-collateral.component.scss b/src/app/loans/loans-view/loan-account-actions/add-collateral/add-collateral.component.scss new file mode 100644 index 000000000..1915ad6d3 --- /dev/null +++ b/src/app/loans/loans-view/loan-account-actions/add-collateral/add-collateral.component.scss @@ -0,0 +1,3 @@ +.container { + max-width: 37rem; +} diff --git a/src/app/loans/loans-view/loan-account-actions/add-collateral/add-collateral.component.spec.ts b/src/app/loans/loans-view/loan-account-actions/add-collateral/add-collateral.component.spec.ts new file mode 100644 index 000000000..f3977f07b --- /dev/null +++ b/src/app/loans/loans-view/loan-account-actions/add-collateral/add-collateral.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AddCollateralComponent } from './add-collateral.component'; + +describe('AddCollateralComponent', () => { + let component: AddCollateralComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ AddCollateralComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(AddCollateralComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/loans/loans-view/loan-account-actions/add-collateral/add-collateral.component.ts b/src/app/loans/loans-view/loan-account-actions/add-collateral/add-collateral.component.ts new file mode 100644 index 000000000..e328c28b6 --- /dev/null +++ b/src/app/loans/loans-view/loan-account-actions/add-collateral/add-collateral.component.ts @@ -0,0 +1,69 @@ +/** Angular Imports. */ +import { Component, OnInit, Input } from '@angular/core'; +import { FormGroup, FormBuilder, Validators } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; + +/** Custom Services. */ +import { LoansService } from 'app/loans/loans.service'; + +/** + * Add Collateral component. + */ +@Component({ + selector: 'mifosx-add-collateral', + templateUrl: './add-collateral.component.html', + styleUrls: ['./add-collateral.component.scss'] +}) +export class AddCollateralComponent implements OnInit { + + @Input() dataObject: any; + + /** Collateral form. */ + collateralForm: FormGroup; + /** Loan Id. */ + loanId: string; + + /** + * Retrieve data from `Resolver`. + * @param {FormBuilder} formBuilder Form Builder. + * @param {Router} router Router. + * @param {ActivatedRoute} route Activated Route. + * @param {LoansService} LoansService loans service. + */ + constructor(private formBuilder: FormBuilder, + private router: Router, + private route: ActivatedRoute, + private loanService: LoansService ) { } + + ngOnInit() { + this.createAddCollateralForm(); + } + + /** + * Set Collateral form. + */ + createAddCollateralForm() { + this.collateralForm = this.formBuilder.group({ + 'collateralTypeId': ['', Validators.required], + 'value': ['', Validators.required], + 'description': [''] + }); + } + + /** + * Submits collateral form. + */ + submit() { + const collateralTypeId = this.collateralForm.value.collateralTypeId; + this.collateralForm.patchValue({ + 'collateralTypeId': collateralTypeId + }); + const loanId = this.route.parent.snapshot.params['loanId']; + const collateralForm = this.collateralForm.value; + collateralForm.locale = 'en'; + this.loanService.createLoanCollateral(loanId, collateralForm).subscribe((response: any) => { + this.router.navigate(['../general'], { relativeTo: this.route }); + }); + } + +} diff --git a/src/app/loans/loans-view/loan-account-actions/loan-account-actions.component.html b/src/app/loans/loans-view/loan-account-actions/loan-account-actions.component.html index 66285e9c2..7a9645149 100644 --- a/src/app/loans/loans-view/loan-account-actions/loan-account-actions.component.html +++ b/src/app/loans/loans-view/loan-account-actions/loan-account-actions.component.html @@ -17,5 +17,6 @@ + diff --git a/src/app/loans/loans-view/loan-account-actions/loan-account-actions.component.ts b/src/app/loans/loans-view/loan-account-actions/loan-account-actions.component.ts index 08860ebfc..adc6df88e 100644 --- a/src/app/loans/loans-view/loan-account-actions/loan-account-actions.component.ts +++ b/src/app/loans/loans-view/loan-account-actions/loan-account-actions.component.ts @@ -16,6 +16,7 @@ export class LoanAccountActionsComponent { actions: { close: boolean, undo_approval: boolean, write_off: boolean, + add_collateral: boolean, assign_loan_officer: boolean, foreclosure: boolean, prepay_loan: boolean, @@ -33,6 +34,7 @@ export class LoanAccountActionsComponent { close: false, undo_approval: false, write_off: false, + add_collateral: false, assign_loan_officer: false, foreclosure: false, prepay_loan: false, diff --git a/src/app/loans/loans.module.ts b/src/app/loans/loans.module.ts index eb447b9e5..e01c21c7c 100644 --- a/src/app/loans/loans.module.ts +++ b/src/app/loans/loans.module.ts @@ -53,6 +53,7 @@ import { WithdrawnByClientComponent } from './loans-view/loan-account-actions/wi 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 { LoansConfirmationDialogBoxComponent } from './custom-dialog/loans-confirmation-dialog-box/loans-confirmation-dialog-box.component'; +import { AddCollateralComponent } from './loans-view/loan-account-actions/add-collateral/add-collateral.component'; /** * Loans Module @@ -104,6 +105,7 @@ import { LoansConfirmationDialogBoxComponent } from './custom-dialog/loans-confi RejectLoanComponent, DisburseComponent, WithdrawnByClientComponent, + AddCollateralComponent ], entryComponents: [ LoansAccountAddCollateralDialogComponent, diff --git a/src/app/loans/loans.service.ts b/src/app/loans/loans.service.ts index 99a2a3294..15fc16e1b 100644 --- a/src/app/loans/loans.service.ts +++ b/src/app/loans/loans.service.ts @@ -71,10 +71,29 @@ export class LoansService { * Get Loan Account Details * @param loanId Loan Id */ - getLoanAccountDetails(loanId: string) { + getLoanAccountDetails(loanId: string): Observable { return this.http.get(`/loans/${loanId}`); } + /** + * Get collateral template. + * @param {string} loanId Loan Id. + * @returns {Observable} + */ + getLoanCollateralTemplate(loanId: string): Observable { + return this.http.get(`/loans/${loanId}/collaterals/template`); + } + + /** + * Create Loan Collateral. + * @param {string} loanId Loan Id. + * @param {any} collateralData Collateral Data. + * @returns {Observable} + */ + createLoanCollateral(loanId: string, collateralData: any): Observable { + return this.http.post(`/loans/${loanId}/collaterals`, collateralData); + } + /** * Get Loans details with httpParams * @param loanId Loan ID