From 3a78659d4b88be46da2c430f6bba4630ddc5e13f Mon Sep 17 00:00:00 2001 From: Benura Abeywardena <43112139+BLasan@users.noreply.github.com> Date: Sun, 12 Jul 2020 12:40:13 +0530 Subject: [PATCH] feat: add loan button (disburse to savings) (#885) Fixes: #857 --- .../loan-action-button.resolver.ts | 2 + .../disburse-loan-account.component.html | 51 ++++++++++++ .../disburse-loan-account.component.scss | 0 .../disburse-loan-account.component.spec.ts | 25 ++++++ .../disburse-loan-account.component.ts | 79 +++++++++++++++++++ .../loan-account-actions.component.html | 1 + .../loan-account-actions.component.ts | 2 + src/app/loans/loans.module.ts | 2 + 8 files changed, 162 insertions(+) create mode 100644 src/app/loans/loans-view/loan-account-actions/disburse-loan-account/disburse-loan-account.component.html create mode 100644 src/app/loans/loans-view/loan-account-actions/disburse-loan-account/disburse-loan-account.component.scss create mode 100644 src/app/loans/loans-view/loan-account-actions/disburse-loan-account/disburse-loan-account.component.spec.ts create mode 100644 src/app/loans/loans-view/loan-account-actions/disburse-loan-account/disburse-loan-account.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 2161ad3e4..ef20eff5e 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 === 'disburse-to-savings') { + return this.loansService.getLoanActionTemplate(loanId, 'disburseToSavings'); } else if (loanActionButton === 'recovery-payment') { return this.loansService.getLoanActionTemplate(loanId, 'recoverypayment'); } else if (loanActionButton === 'view-guarantors') { diff --git a/src/app/loans/loans-view/loan-account-actions/disburse-loan-account/disburse-loan-account.component.html b/src/app/loans/loans-view/loan-account-actions/disburse-loan-account/disburse-loan-account.component.html new file mode 100644 index 000000000..cb2498298 --- /dev/null +++ b/src/app/loans/loans-view/loan-account-actions/disburse-loan-account/disburse-loan-account.component.html @@ -0,0 +1,51 @@ +
+ +
+ + + +
+ + + Disbursement On + + + + + Disbursement Date is required + + + + + Transaction amount + + + Transaction Amount is required + + + + + Fixed EMI amount + + + Fixed EMI Amount is required + + + + + Note + + + +
+ + + + + + +
+ +
+ +
diff --git a/src/app/loans/loans-view/loan-account-actions/disburse-loan-account/disburse-loan-account.component.scss b/src/app/loans/loans-view/loan-account-actions/disburse-loan-account/disburse-loan-account.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/src/app/loans/loans-view/loan-account-actions/disburse-loan-account/disburse-loan-account.component.spec.ts b/src/app/loans/loans-view/loan-account-actions/disburse-loan-account/disburse-loan-account.component.spec.ts new file mode 100644 index 000000000..fcb1ace98 --- /dev/null +++ b/src/app/loans/loans-view/loan-account-actions/disburse-loan-account/disburse-loan-account.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DisburseLoanAccountComponent } from './disburse-loan-account.component'; + +describe('DisburseLoanAccountComponent', () => { + let component: DisburseLoanAccountComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ DisburseLoanAccountComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(DisburseLoanAccountComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/loans/loans-view/loan-account-actions/disburse-loan-account/disburse-loan-account.component.ts b/src/app/loans/loans-view/loan-account-actions/disburse-loan-account/disburse-loan-account.component.ts new file mode 100644 index 000000000..1e5aaa5a0 --- /dev/null +++ b/src/app/loans/loans-view/loan-account-actions/disburse-loan-account/disburse-loan-account.component.ts @@ -0,0 +1,79 @@ +/** Angular Imports. */ +import { Component, OnInit, Input } from '@angular/core'; +import { FormBuilder, Validators, FormGroup, FormControl } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { DatePipe } from '@angular/common'; + +/** Custom Service. */ +import { LoansService } from 'app/loans/loans.service'; + +/** + * Disburse To Savings component. + */ +@Component({ + selector: 'mifosx-disburse-loan-account', + templateUrl: './disburse-loan-account.component.html', + styleUrls: ['./disburse-loan-account.component.scss'] +}) +export class DisburseLoanAccountComponent implements OnInit { + + @Input() dataObject: any; + + /** Minimum Date allowed. */ + minDate = new Date(2000, 0, 1); + /** Maximum Date allowed. */ + maxDate = new Date(); + /** Disbursement Loan form. */ + disbursementForm: FormGroup; + + /** + * Get data from `Resolver`. + * @param {FormBuilder} formBuilder FormBuilder. + * @param {ActivatedRoute} route ActivatedRoute. + * @param {Router} router Router. + * @param {DatePipe} datePipe DatePipe. + * @param {LoansService} loanService Loan Service. + */ + constructor(private formBuilder: FormBuilder, + private route: ActivatedRoute, + private router: Router, + private datePipe: DatePipe, + private loanService: LoansService) { } + + ngOnInit() { + this.setDisbursementToSavingsForm(); + } + + /** + * Set Disbursement Loan form. + */ + setDisbursementToSavingsForm() { + this.disbursementForm = this.formBuilder.group({ + 'actualDisbursementDate': [new Date(), Validators.required], + 'transactionAmount': [this.dataObject.amount, Validators.required], + 'note': ['', Validators.required] + }); + if (this.dataObject.fixedEmiAmount !== null || this.dataObject.fixedEmiAmount !== undefined) { + this.disbursementForm.addControl('fixedEmiAmount', new FormControl(this.dataObject.fixedEmiAmount, [Validators.required])); + } + } + + /** + * Submit Disburse Form. + */ + submit() { + const actualDisbursementDate = this.disbursementForm.value.actualDisbursementDate; + const dateFormat = 'dd MMMM yyyy'; + this.disbursementForm.patchValue({ + actualDisbursementDate: this.datePipe.transform(actualDisbursementDate, dateFormat) + }); + const loanId = this.route.parent.snapshot.params['loanId']; + const disbursementForm = this.disbursementForm.value; + disbursementForm.locale = 'en'; + disbursementForm.dateFormat = dateFormat; + this.loanService.loanActionButtons(loanId, 'disbursetosavings', disbursementForm).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 10f14b1b7..5240d8bea 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 @@ -13,5 +13,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 810dda06d..f81b7a335 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 @@ -19,6 +19,7 @@ export class LoanAccountActionsComponent { assign_loan_officer: boolean, foreclosure: boolean, prepay_loan: boolean, + disburse_to_savings: boolean, make_repayment: boolean, waive_interest: boolean, close_as_rescheduled: boolean, @@ -32,6 +33,7 @@ export class LoanAccountActionsComponent { assign_loan_officer: false, foreclosure: false, prepay_loan: false, + disburse_to_savings: false, make_repayment: false, waive_interest: false, close_as_rescheduled: false, diff --git a/src/app/loans/loans.module.ts b/src/app/loans/loans.module.ts index 1cff362e1..db7bceb11 100644 --- a/src/app/loans/loans.module.ts +++ b/src/app/loans/loans.module.ts @@ -49,6 +49,7 @@ import { CreateGuarantorComponent } from './loans-view/loan-account-actions/crea 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 { DisburseLoanAccountComponent } from './loans-view/loan-account-actions/disburse-loan-account/disburse-loan-account.component'; /** * Loans Module @@ -96,6 +97,7 @@ import { LoansConfirmationDialogBoxComponent } from './custom-dialog/loans-confi CreateGuarantorComponent, LoansAccountViewGuarantorDetailsDialogComponent, LoansConfirmationDialogBoxComponent, + DisburseLoanAccountComponent ], entryComponents: [ LoansAccountAddCollateralDialogComponent,