From c134026030c61e3896bdbc82358091a427168aee Mon Sep 17 00:00:00 2001 From: Karan Takalkar Date: Sun, 19 Jul 2020 13:53:28 +0530 Subject: [PATCH] feat: client actions (screen-reports) (#1141) Fixes: #1140 --- .../client-actions.component.html | 3 +- .../client-actions.component.ts | 4 +- .../client-screen-reports.component.html | 56 ++++++++++++ .../client-screen-reports.component.scss | 6 ++ .../client-screen-reports.component.spec.ts | 25 +++++ .../client-screen-reports.component.ts | 91 +++++++++++++++++++ .../clients-view/clients-view.component.html | 1 + .../clients-view/clients-view.component.ts | 1 + src/app/clients/clients.module.ts | 4 +- src/app/clients/clients.service.ts | 12 +++ .../client-actions.resolver.ts | 12 ++- 11 files changed, 207 insertions(+), 8 deletions(-) create mode 100644 src/app/clients/clients-view/client-actions/client-screen-reports/client-screen-reports.component.html create mode 100644 src/app/clients/clients-view/client-actions/client-screen-reports/client-screen-reports.component.scss create mode 100644 src/app/clients/clients-view/client-actions/client-screen-reports/client-screen-reports.component.spec.ts create mode 100644 src/app/clients/clients-view/client-actions/client-screen-reports/client-screen-reports.component.ts diff --git a/src/app/clients/clients-view/client-actions/client-actions.component.html b/src/app/clients/clients-view/client-actions/client-actions.component.html index 8a54bd743..bed88c9c7 100644 --- a/src/app/clients/clients-view/client-actions/client-actions.component.html +++ b/src/app/clients/clients-view/client-actions/client-actions.component.html @@ -12,4 +12,5 @@ - \ No newline at end of file + + diff --git a/src/app/clients/clients-view/client-actions/client-actions.component.ts b/src/app/clients/clients-view/client-actions/client-actions.component.ts index 30aa9c23f..638855923 100644 --- a/src/app/clients/clients-view/client-actions/client-actions.component.ts +++ b/src/app/clients/clients-view/client-actions/client-actions.component.ts @@ -28,6 +28,7 @@ export class ClientActionsComponent { 'Undo Rejection': boolean 'Add Charge': boolean 'Take Survey': boolean + 'Client Screen Reports': boolean } = { 'Assign Staff': false, 'Close': false, @@ -42,7 +43,8 @@ export class ClientActionsComponent { 'Reactivate': false, 'Undo Rejection': false, 'Add Charge': false, - 'Take Survey': false + 'Take Survey': false, + 'Client Screen Reports': false }; /** diff --git a/src/app/clients/clients-view/client-actions/client-screen-reports/client-screen-reports.component.html b/src/app/clients/clients-view/client-actions/client-screen-reports/client-screen-reports.component.html new file mode 100644 index 000000000..46c603c73 --- /dev/null +++ b/src/app/clients/clients-view/client-actions/client-screen-reports/client-screen-reports.component.html @@ -0,0 +1,56 @@ +
+ + + +
+ + + +
+ + + Client Screen Reports + + + {{ template.name }} + + + + Screen Report is required + + + +
+ +
+ + + + + + +
+ +
+ +
+ +
+ + + +
+ +
+ +
+

Please select a screen report.

+
+ +
+ +
diff --git a/src/app/clients/clients-view/client-actions/client-screen-reports/client-screen-reports.component.scss b/src/app/clients/clients-view/client-actions/client-screen-reports/client-screen-reports.component.scss new file mode 100644 index 000000000..8d249eb07 --- /dev/null +++ b/src/app/clients/clients-view/client-actions/client-screen-reports/client-screen-reports.component.scss @@ -0,0 +1,6 @@ +.container { + max-width: 37rem; + .print { + align-self: flex-end; + } +} diff --git a/src/app/clients/clients-view/client-actions/client-screen-reports/client-screen-reports.component.spec.ts b/src/app/clients/clients-view/client-actions/client-screen-reports/client-screen-reports.component.spec.ts new file mode 100644 index 000000000..59948cf1d --- /dev/null +++ b/src/app/clients/clients-view/client-actions/client-screen-reports/client-screen-reports.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ClientScreenReportsComponent } from './client-screen-reports.component'; + +describe('ClientScreenReportsComponent', () => { + let component: ClientScreenReportsComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ClientScreenReportsComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ClientScreenReportsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/clients/clients-view/client-actions/client-screen-reports/client-screen-reports.component.ts b/src/app/clients/clients-view/client-actions/client-screen-reports/client-screen-reports.component.ts new file mode 100644 index 000000000..bb097458e --- /dev/null +++ b/src/app/clients/clients-view/client-actions/client-screen-reports/client-screen-reports.component.ts @@ -0,0 +1,91 @@ +/** Angular Imports */ +import { Component, OnInit, Renderer2, ViewChild, ElementRef, SecurityContext } from '@angular/core'; +import { FormGroup, FormBuilder } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; + +/** Custom Services */ +import { ClientsService } from 'app/clients/clients.service'; +import { DomSanitizer } from '@angular/platform-browser'; + +/** + * Client Screen Reports Component. + */ +@Component({ + selector: 'mifosx-client-screen-reports', + templateUrl: './client-screen-reports.component.html', + styleUrls: ['./client-screen-reports.component.scss'] +}) +export class ClientScreenReportsComponent implements OnInit { + + /** Client Screen Reportform. */ + clientScreenReportForm: FormGroup; + /** Templates Data */ + templatesData: any; + /** Client Id */ + clientId: any; + /** HTML Template */ + template: any; + + /** Screen report output reference */ + @ViewChild('screenReport') screenReportRef: ElementRef; + + /** + * Fetches Client Action Data from `resolve` + * @param {FormBuilder} formBuilder Form Builder + * @param {ClientsService} clientsService Clients Service + * @param {ActivatedRoute} route Activated Route + * @param {DomSanitizer} sanitizer DOM Sanitizer + * @param {Renderer2} renderer Renderer 2 + */ + constructor(private formBuilder: FormBuilder, + private clientsService: ClientsService, + private route: ActivatedRoute, + private sanitizer: DomSanitizer, + private renderer: Renderer2) { + this.route.data.subscribe((data: { clientActionData: any }) => { + this.templatesData = data.clientActionData; + }); + this.clientId = this.route.parent.snapshot.params['clientId']; + } + + /** + * Creates the client screen report form. + */ + ngOnInit() { + this.createClientScreenReportForm(); + } + + /** + * Creates the client screen report form. + */ + createClientScreenReportForm() { + this.clientScreenReportForm = this.formBuilder.group({ + 'templateId': [''] + }); + } + + /** + * Prints client 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 client. + */ + generate() { + const templateId = this.clientScreenReportForm.get('templateId').value; + this.clientsService.retrieveClientReportTemplate(templateId, this.clientId).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/clients/clients-view/clients-view.component.html b/src/app/clients/clients-view/clients-view.component.html index 674920155..e20526ffa 100644 --- a/src/app/clients/clients-view/clients-view.component.html +++ b/src/app/clients/clients-view/clients-view.component.html @@ -51,6 +51,7 @@ + diff --git a/src/app/clients/clients-view/clients-view.component.ts b/src/app/clients/clients-view/clients-view.component.ts index 2eb6d2744..5bf695670 100644 --- a/src/app/clients/clients-view/clients-view.component.ts +++ b/src/app/clients/clients-view/clients-view.component.ts @@ -71,6 +71,7 @@ export class ClientsViewComponent implements OnInit { case 'Reactivate': case 'Undo Rejection': case 'Add Charge': + case 'Client Screen Reports': this.router.navigate([`actions/${name}`], { relativeTo: this.route }); break; case 'Unassign Staff': diff --git a/src/app/clients/clients.module.ts b/src/app/clients/clients.module.ts index 85a78941b..7cc664ab7 100644 --- a/src/app/clients/clients.module.ts +++ b/src/app/clients/clients.module.ts @@ -48,6 +48,7 @@ import { ViewSignatureDialogComponent } from './clients-view/custom-dialogs/view import { UploadSignatureDialogComponent } from './clients-view/custom-dialogs/upload-signature-dialog/upload-signature-dialog.component'; import { DeleteSignatureDialogComponent } from './clients-view/custom-dialogs/delete-signature-dialog/delete-signature-dialog.component'; import { UploadImageDialogComponent } from './clients-view/custom-dialogs/upload-image-dialog/upload-image-dialog.component'; +import { ClientScreenReportsComponent } from './clients-view/client-actions/client-screen-reports/client-screen-reports.component'; /** @@ -101,7 +102,8 @@ import { UploadImageDialogComponent } from './clients-view/custom-dialogs/upload ViewSignatureDialogComponent, UploadSignatureDialogComponent, DeleteSignatureDialogComponent, - UploadImageDialogComponent + UploadImageDialogComponent, + ClientScreenReportsComponent ], entryComponents: [ UploadDocumentDialogComponent, diff --git a/src/app/clients/clients.service.ts b/src/app/clients/clients.service.ts index 086de13a6..08796cba7 100644 --- a/src/app/clients/clients.service.ts +++ b/src/app/clients/clients.service.ts @@ -301,6 +301,18 @@ export class ClientsService { return this.http.post(`/clients/${clientId}/charges`, charge); } + getClientReportTemplates() { + const httpParams = new HttpParams() + .set('entityId', '0') + .set('typeId', '0'); + return this.http.get('/templates', { params: httpParams }); + } + + retrieveClientReportTemplate(templateId: string, clientId: string) { + const httpParams = new HttpParams().set('clientId', clientId); + return this.http.post(`/templates/${templateId}`, {}, { params: httpParams, responseType: 'text' }); + } + /** * @returns {Observable} Offices data */ diff --git a/src/app/clients/common-resolvers/client-actions.resolver.ts b/src/app/clients/common-resolvers/client-actions.resolver.ts index 03e10fffb..787ee707e 100644 --- a/src/app/clients/common-resolvers/client-actions.resolver.ts +++ b/src/app/clients/common-resolvers/client-actions.resolver.ts @@ -28,9 +28,6 @@ export class ClientActionsResolver implements Resolve { const actionName = route.paramMap.get('name'); const clientId = route.paramMap.get('clientId') || route.parent.parent.paramMap.get('clientId'); switch (actionName) { - case 'Assign Staff': - case 'Update Default Savings': - return this.clientsService.getClientDataAndTemplate(clientId); case 'Survey': return this.clientsService.getSurveys(clientId); case 'Take Survey': @@ -43,12 +40,17 @@ export class ClientActionsResolver implements Resolve { return this.clientsService.getClientCommandTemplate('withdraw'); case 'Transfer Client': return this.clientsService.getOffices(); + case 'Add Charge': + return this.clientsService.getClientChargeTemplate(clientId); + case 'Client Screen Reports': + return this.clientsService.getClientReportTemplates(); + case 'Assign Staff': + case 'Update Default Savings': + return this.clientsService.getClientDataAndTemplate(clientId); case 'Undo Transfer': case 'Accept Transfer': case 'Reject Transfer': return this.clientsService.getClientTransferProposalDate(clientId); - case 'Add Charge': - return this.clientsService.getClientChargeTemplate(clientId); default: return undefined; }