From 7aa26c64b2f079aba708343a638ef1578a4395aa Mon Sep 17 00:00:00 2001 From: Muskan Khedia <36980003+muskankhedia@users.noreply.github.com> Date: Sun, 19 Jul 2020 21:50:58 +0530 Subject: [PATCH] feat: add loan actions (loan-screen-reports) (#1143) Fixes: #850 --- .../loan-action-button.resolver.ts | 2 + .../loan-account-actions.component.html | 1 + .../loan-account-actions.component.ts | 7 +- .../loan-screen-reports.component.html | 57 ++++++++++++ .../loan-screen-reports.component.scss | 9 ++ .../loan-screen-reports.component.spec.ts | 25 +++++ .../loan-screen-reports.component.ts | 91 +++++++++++++++++++ src/app/loans/loans.module.ts | 2 + src/app/loans/loans.service.ts | 11 +++ 9 files changed, 203 insertions(+), 2 deletions(-) create mode 100644 src/app/loans/loans-view/loan-account-actions/loan-screen-reports/loan-screen-reports.component.html create mode 100644 src/app/loans/loans-view/loan-account-actions/loan-screen-reports/loan-screen-reports.component.scss create mode 100644 src/app/loans/loans-view/loan-account-actions/loan-screen-reports/loan-screen-reports.component.spec.ts create mode 100644 src/app/loans/loans-view/loan-account-actions/loan-screen-reports/loan-screen-reports.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 ccaa4d36a..3a5cffd1d 100644 --- a/src/app/loans/common-resolvers/loan-action-button.resolver.ts +++ b/src/app/loans/common-resolvers/loan-action-button.resolver.ts @@ -54,6 +54,8 @@ export class LoanActionButtonResolver implements Resolve { return this.loansService.getGuarantorTemplate(loanId); } else if (loanActionButton === 'disburse') { return this.loansService.getLoanActionTemplate(loanId, 'disburse'); + } else if (loanActionButton === 'loan-screen-reports') { + return this.loansService.getLoanScreenReportsData(); } else { return undefined; } 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 f5be7af08..d184b2963 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 @@ -19,5 +19,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 66df0deeb..30e44a2f7 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 @@ -31,7 +31,8 @@ export class LoanAccountActionsComponent { create_guarantor: boolean, disburse: boolean, withdrawn_by_client: boolean, - undo_disbursal: boolean } = { + undo_disbursal: boolean, + loan_screen_reports: boolean } = { close: false, undo_approval: false, write_off: false, @@ -50,7 +51,9 @@ export class LoanAccountActionsComponent { create_guarantor: false, disburse: false, withdrawn_by_client: false, - undo_disbursal: false }; + undo_disbursal: false, + loan_screen_reports: false }; + actionButtonData: any; actionName: any; diff --git a/src/app/loans/loans-view/loan-account-actions/loan-screen-reports/loan-screen-reports.component.html b/src/app/loans/loans-view/loan-account-actions/loan-screen-reports/loan-screen-reports.component.html new file mode 100644 index 000000000..5a2438b89 --- /dev/null +++ b/src/app/loans/loans-view/loan-account-actions/loan-screen-reports/loan-screen-reports.component.html @@ -0,0 +1,57 @@ +
+ + + +
+ + + +
+ + + Loan Screen Reports + + + {{ template.name }} + + + + Screen Report is required + + + +
+ +
+ + + + + + +
+ +
+ +
+ +
+ + + +
+ +
+ +
+

Please select a screen report.

+
+ +
+ +
diff --git a/src/app/loans/loans-view/loan-account-actions/loan-screen-reports/loan-screen-reports.component.scss b/src/app/loans/loans-view/loan-account-actions/loan-screen-reports/loan-screen-reports.component.scss new file mode 100644 index 000000000..444167186 --- /dev/null +++ b/src/app/loans/loans-view/loan-account-actions/loan-screen-reports/loan-screen-reports.component.scss @@ -0,0 +1,9 @@ +.container { + max-width: 37rem; + .print { + align-self: flex-end; + } + .screen-report { + text-align: center; + } +} diff --git a/src/app/loans/loans-view/loan-account-actions/loan-screen-reports/loan-screen-reports.component.spec.ts b/src/app/loans/loans-view/loan-account-actions/loan-screen-reports/loan-screen-reports.component.spec.ts new file mode 100644 index 000000000..ef9a6baf0 --- /dev/null +++ b/src/app/loans/loans-view/loan-account-actions/loan-screen-reports/loan-screen-reports.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LoanScreenReportsComponent } from './loan-screen-reports.component'; + +describe('LoanScreenReportsComponent', () => { + let component: LoanScreenReportsComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ LoanScreenReportsComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(LoanScreenReportsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/loans/loans-view/loan-account-actions/loan-screen-reports/loan-screen-reports.component.ts b/src/app/loans/loans-view/loan-account-actions/loan-screen-reports/loan-screen-reports.component.ts new file mode 100644 index 000000000..9179a6973 --- /dev/null +++ b/src/app/loans/loans-view/loan-account-actions/loan-screen-reports/loan-screen-reports.component.ts @@ -0,0 +1,91 @@ +/** Angular Imports */ +import { Component, OnInit, Renderer2, ViewChild, ElementRef, SecurityContext, Input } from '@angular/core'; +import { FormGroup, FormBuilder } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; + +/** Custom Services */ +import { LoansService } from 'app/loans/loans.service'; +import { DomSanitizer } from '@angular/platform-browser'; + +/** + * Loans Screen Reports Component. + */ +@Component({ + selector: 'mifosx-loan-screen-reports', + templateUrl: './loan-screen-reports.component.html', + styleUrls: ['./loan-screen-reports.component.scss'] +}) +export class LoanScreenReportsComponent implements OnInit { + + @Input() dataObject: any; + /** Loan Screen Reportform. */ + loanScreenReportForm: FormGroup; + /** Templates Data */ + templatesData: any; + /** Loan Id */ + loanId: any; + /** HTML Template */ + template: any; + + /** Screen report output reference */ + @ViewChild('screenReport') screenReportRef: ElementRef; + + /** + * Fetches Loan Action Data from `resolve` + * @param {FormBuilder} formBuilder Form Builder + * @param {LoansService} loansService Loans Service + * @param {ActivatedRoute} route Activated Route + * @param {DomSanitizer} sanitizer DOM Sanitizer + * @param {Renderer2} renderer Renderer 2 + */ + constructor(private formBuilder: FormBuilder, + private loansService: LoansService, + private route: ActivatedRoute, + private sanitizer: DomSanitizer, + private renderer: Renderer2) { + this.loanId = this.route.parent.snapshot.params['loanId']; + } + + /** + * Creates the loan screen report form. + */ + ngOnInit() { + this.templatesData = this.dataObject; + this.createLoanScreenReportForm(); + console.log('templateData: ', this.templatesData); + } + + /** + * Creates the loan screen report form. + */ + createLoanScreenReportForm() { + this.loanScreenReportForm = this.formBuilder.group({ + 'templateId': [''] + }); + } + + /** + * Prints loan screen report + */ + print() { + const templateWindow = window.open('', 'Screen Report', 'height=400,width=600'); + templateWindow.document.write(''); + templateWindow.document.write(''); + templateWindow.document.write(this.template); + templateWindow.document.write(''); + templateWindow.print(); + templateWindow.close(); + } + + /** + * Submits the form and generates screen report for the loan. + */ + generate() { + const templateId = this.loanScreenReportForm.get('templateId').value; + this.loansService.getTemplateData(templateId, this.loanId).subscribe((response: any) => { + this.template = this.sanitizer.sanitize(SecurityContext.HTML, response); + this.renderer.setProperty(this.screenReportRef.nativeElement, 'innerHTML', this.template); + }); + } + +} diff --git a/src/app/loans/loans.module.ts b/src/app/loans/loans.module.ts index 13f1606f6..03c989023 100644 --- a/src/app/loans/loans.module.ts +++ b/src/app/loans/loans.module.ts @@ -59,6 +59,7 @@ import { LoansConfirmationDialogBoxComponent } from './custom-dialog/loans-confi import { LoanAccountLoadDocumentsDialogComponent } from './custom-dialog/loan-account-load-documents-dialog/loan-account-load-documents-dialog.component'; import { StandingInstructionsTabComponent } from './loans-view/standing-instructions-tab/standing-instructions-tab.component'; import { EditLoansAccountComponent } from './edit-loans-account/edit-loans-account.component'; +import { LoanScreenReportsComponent } from './loans-view/loan-account-actions/loan-screen-reports/loan-screen-reports.component'; /** * Loans Module @@ -116,6 +117,7 @@ import { EditLoansAccountComponent } from './edit-loans-account/edit-loans-accou LoanAccountLoadDocumentsDialogComponent, StandingInstructionsTabComponent, EditLoansAccountComponent, + LoanScreenReportsComponent ], entryComponents: [ LoansAccountAddCollateralDialogComponent, diff --git a/src/app/loans/loans.service.ts b/src/app/loans/loans.service.ts index 914a31ca1..0e9bb616a 100644 --- a/src/app/loans/loans.service.ts +++ b/src/app/loans/loans.service.ts @@ -154,6 +154,12 @@ export class LoansService { return this.http.post(`/loans/${loanId}/transactions`, data, {params: httpParams}); } + getLoanScreenReportsData(): Observable { + const httpParams = new HttpParams().set('entityId', '1') + .set('typeId', '0'); + return this.http.get(`/templates`, {params: httpParams}); + } + /** * Get Loan Datatables */ @@ -331,4 +337,9 @@ export class LoansService { return this.http.put(`/loans/${loanId}`, loanData); } + getTemplateData(templateId: any, loanId: any): Observable { + const httpParams = new HttpParams().set('loanId', loanId); + return this.http.post(`/templates/${templateId}`, {}, { params: httpParams, responseType: 'text'}); + } + }