From 51616ff9fde67427b1bb95c25dc392f5f0f1e310 Mon Sep 17 00:00:00 2001 From: Muskan Khedia <36980003+muskankhedia@users.noreply.github.com> Date: Fri, 3 Jul 2020 10:41:14 +0530 Subject: [PATCH] feat: add view Recurring Deposits Account Page (#961) Fixes: #227 --- src/app/clients/clients-routing.module.ts | 4 + .../general-tab/general-tab.component.html | 6 +- ...ecurring-deposits-account-view.resolver.ts | 32 +++ ...deposits-account-view.component-theme.scss | 16 ++ ...rring-deposits-account-view.component.html | 202 ++++++++++++++++++ ...rring-deposits-account-view.component.scss | 53 +++++ ...ng-deposits-account-view.component.spec.ts | 25 +++ ...curring-deposits-account-view.component.ts | 72 +++++++ .../recurring-deposits-buttons.config.ts | 136 ++++++++++++ .../recurring-deposits-routing.module.ts | 38 ++++ .../recurring-deposits.module.spec.ts | 13 ++ .../recurring-deposits.module.ts | 31 +++ .../recurring-deposits.service.spec.ts | 12 ++ .../recurring-deposits.service.ts | 32 +++ ...recurring-deposits_account_placeholder.png | Bin 0 -> 21151 bytes src/theme/custom/denim-yellowgreen.scss | 2 + src/theme/custom/pictonblue-yellowgreen.scss | 2 + 17 files changed, 674 insertions(+), 2 deletions(-) create mode 100644 src/app/recurring-deposits/common-resolvers/recurring-deposits-account-view.resolver.ts create mode 100644 src/app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component-theme.scss create mode 100644 src/app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component.html create mode 100644 src/app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component.scss create mode 100644 src/app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component.spec.ts create mode 100644 src/app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component.ts create mode 100644 src/app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-buttons.config.ts create mode 100644 src/app/recurring-deposits/recurring-deposits-routing.module.ts create mode 100644 src/app/recurring-deposits/recurring-deposits.module.spec.ts create mode 100644 src/app/recurring-deposits/recurring-deposits.module.ts create mode 100644 src/app/recurring-deposits/recurring-deposits.service.spec.ts create mode 100644 src/app/recurring-deposits/recurring-deposits.service.ts create mode 100644 src/assets/images/recurring-deposits_account_placeholder.png diff --git a/src/app/clients/clients-routing.module.ts b/src/app/clients/clients-routing.module.ts index 3e800ebc2..3a98e5198 100644 --- a/src/app/clients/clients-routing.module.ts +++ b/src/app/clients/clients-routing.module.ts @@ -181,6 +181,10 @@ const routes: Routes = [ path: 'savingsaccounts', loadChildren: '../savings/savings.module#SavingsModule' }, + { + path: 'recurringdeposits', + loadChildren: '../recurring-deposits/recurring-deposits.module#RecurringDepositsModule' + }, { path: 'sharesaccounts', loadChildren: '../shares/shares.module#SharesModule' diff --git a/src/app/clients/clients-view/general-tab/general-tab.component.html b/src/app/clients/clients-view/general-tab/general-tab.component.html index 98ce7e5c5..8b62ab1aa 100644 --- a/src/app/clients/clients-view/general-tab/general-tab.component.html +++ b/src/app/clients/clients-view/general-tab/general-tab.component.html @@ -469,7 +469,7 @@ + [routerLink]="['../', 'recurringdeposits', row.id]"> @@ -494,8 +494,10 @@ - + +
diff --git a/src/app/recurring-deposits/common-resolvers/recurring-deposits-account-view.resolver.ts b/src/app/recurring-deposits/common-resolvers/recurring-deposits-account-view.resolver.ts new file mode 100644 index 000000000..b564eb244 --- /dev/null +++ b/src/app/recurring-deposits/common-resolvers/recurring-deposits-account-view.resolver.ts @@ -0,0 +1,32 @@ +/** Angular Imports */ +import { Injectable } from '@angular/core'; +import { Resolve, ActivatedRouteSnapshot } from '@angular/router'; + +/** rxjs Imports */ +import { Observable } from 'rxjs'; + +/** Custom Services */ +import { RecurringDepositsService } from '../recurring-deposits.service'; + +/** + * RecurringDeposits Account data resolver. + */ +@Injectable() +export class RecurringDepositsAccountViewResolver implements Resolve { + + /** + * @param {RecurringDepositsService} RecurringDepositsService RecurringDeposits service. + */ + constructor(private recurringDepositsService: RecurringDepositsService) { } + + /** + * Returns the RecurringDeposits Account data. + * @param {ActivatedRouteSnapshot} route Route Snapshot + * @returns {Observable} + */ + resolve(route: ActivatedRouteSnapshot): Observable { + const recurringDepositAccountId = route.paramMap.get('recurringDepositAccountId'); + return this.recurringDepositsService.getRecurringDepositsAccountData(recurringDepositAccountId); + } + +} diff --git a/src/app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component-theme.scss b/src/app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component-theme.scss new file mode 100644 index 000000000..ec65550b6 --- /dev/null +++ b/src/app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component-theme.scss @@ -0,0 +1,16 @@ +@import "~@angular/material/theming"; + +@mixin recurring-deposits-account-view-component-theme($theme) { + $primary: map-get($theme, primary); + mifosx-recurring-deposits-account-view { + .recurringDeposits-account-card { + .header { + background-color: mat-color($primary, 500); + } + .table-headers { + background-color: mat-color($primary, 500); + color: mat-contrast($primary, 500); + } + } + } +} diff --git a/src/app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component.html b/src/app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component.html new file mode 100644 index 000000000..e32d72f1a --- /dev/null +++ b/src/app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component.html @@ -0,0 +1,202 @@ + diff --git a/src/app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component.scss b/src/app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component.scss new file mode 100644 index 000000000..4c783d851 --- /dev/null +++ b/src/app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component.scss @@ -0,0 +1,53 @@ +.recurringDeposits-account-card { + margin: 0 auto; + max-width: 80rem; + width: 90%; + padding: 0; + .header { + padding: 1%; + .header-title-group { + .account-card-title { + color: white; + width: 90%; + p { + color: white; + } + } + } + .profile-image-container { + margin: 1%; + .profile-image { + object-fit: cover; + border-radius: 20px; + } + } + .account-actions { + align-self: flex-end; + margin: 0 1%; + i { + margin-bottom: 2px; + margin-right: 4px; + } + } + } + .navigation-tabs { + background-color: #f2f2f2; + overflow: auto; + } + .content { + .recurringDeposits-account-tables { + padding: 1%; + margin: 1%; + .table-headers { + margin: 0; + padding: 6px; + } + td { + padding: 3px; + } + } + } + i, img:hover { + cursor: pointer; + } +} diff --git a/src/app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component.spec.ts b/src/app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component.spec.ts new file mode 100644 index 000000000..eaa6cacfe --- /dev/null +++ b/src/app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { RecurringDepositsAccountViewComponent } from './recurring-deposits-account-view.component'; + +describe('RecurringDepositsAccountViewComponent', () => { + let component: RecurringDepositsAccountViewComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ RecurringDepositsAccountViewComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(RecurringDepositsAccountViewComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component.ts b/src/app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component.ts new file mode 100644 index 000000000..17f7d3e16 --- /dev/null +++ b/src/app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component.ts @@ -0,0 +1,72 @@ +/** Angular Imports */ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { MatDialog } from '@angular/material'; +import { DatePipe } from '@angular/common'; + +/** Custom Services */ +import { RecurringDepositsService } from '../recurring-deposits.service'; + +/** Custom Buttons Configuration */ +import { RecurringDepositsButtonsConfiguration } from './recurring-deposits-buttons.config'; + +/** + * RecurringDeposits Account View Component + */ +@Component({ + selector: 'mifosx-recurring-deposits-account-view', + templateUrl: './recurring-deposits-account-view.component.html', + styleUrls: ['./recurring-deposits-account-view.component.scss'] +}) +export class RecurringDepositsAccountViewComponent implements OnInit { + + /** RecurringDeposits Account Data */ + recurringDepositsAccountData: any; + buttonConfig: RecurringDepositsButtonsConfiguration; + charges: any; + + /** + * Fetches recurringDeposits account data from `resolve` + * @param {ActivatedRoute} route Activated Route + * @param {Router} router Router + * @param {RecurringDepositsService} recurringDepositsService RecurringDeposits Service + */ + constructor(private route: ActivatedRoute, + private router: Router, + private datePipe: DatePipe, + private recurringDepositsService: RecurringDepositsService, + public dialog: MatDialog) { + this.route.data.subscribe((data: { recurringDepositsAccountData: any }) => { + this.recurringDepositsAccountData = data.recurringDepositsAccountData; + this.charges = this.recurringDepositsAccountData.charges; + }); + } + + ngOnInit() { + this.setConditionalButtons(); + } + + /** + * Adds options to button config. conditionaly. + */ + setConditionalButtons() { + const status = this.recurringDepositsAccountData.status.value; + this.buttonConfig = new RecurringDepositsButtonsConfiguration(status); + if (this.recurringDepositsAccountData.clientId && this.recurringDepositsAccountData.status.value === 'Matured') { + this.buttonConfig.addOption({ + name: 'Transfer Funds', + }); + } + + if (this.recurringDepositsAccountData.charges && this.recurringDepositsAccountData.status.value === 'Matured') { + this.charges.forEach((element: any) => { + if (element.name === 'Annual fee - INR') { + this.buttonConfig.addOption({ + name: 'Apply Annual Fees', + }); + } + }); + } + } + +} diff --git a/src/app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-buttons.config.ts b/src/app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-buttons.config.ts new file mode 100644 index 000000000..423d412b6 --- /dev/null +++ b/src/app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-buttons.config.ts @@ -0,0 +1,136 @@ +/** Recurring Deposits Account Buttons Configuration */ +export class RecurringDepositsButtonsConfiguration { + + optionArray: { + name: string, + taskPermissionName?: string, + }[]; + + buttonsArray: { + name: string, + icon: string, + taskPermissionName?: string, + }[]; + + constructor(status: string) { + this.setOptions(status); + this.setButtons(status); + } + + get singleButtons() { + return this.buttonsArray; + } + + get options() { + return this.optionArray; + } + + setButtons(status: string) { + switch (status) { + case 'Active': + this.buttonsArray = [ + { + name: 'Deposit', + icon: 'fa fa-arrow-up' + }, + { + name: 'Premature Close', + icon: 'fa fa-arrow-left' + }, + { + name: 'Calculate Interest', + icon: 'fa fa-table', + } + ]; + break; + case 'Submitted and pending approval': + this.buttonsArray = [ + { + name: 'Modify Application', + icon: 'fa fa-pencil ', + }, + { + name: 'Approve', + icon: 'fa fa-check' + } + ]; + break; + case 'Approved': + this.buttonsArray = [ + { + name: 'Undo Approval', + icon: 'fa fa-undo' + }, + { + name: 'Activate', + icon: 'fa fa-check' + } + ]; + break; + case 'Matured': + this.buttonsArray = [ + { + name: 'Close', + icon: 'fa fa-arrow-right' + }, + { + name: 'Calculate Interest', + icon: 'fa fa-table' + }, + { + name: 'Post Interest', + icon: 'fa fa-table' + } + ]; + break; + default: + this.buttonsArray = []; + } + } + + setOptions(status: string) { + switch (status) { + case 'Active': + this.optionArray = [ + { + name: 'Post Interest', + }, + { + name: 'Add Charge', + } + ]; + break; + case 'Submitted and pending approval': + this.optionArray = [ + { + name: 'Reject' + }, + { + name: 'Withdraw By Client' + }, + { + name: 'Add Charge' + }, + { + name: 'Delete' + } + ]; + break; + case 'Matured': + this.optionArray = [ + { + name: 'Add Charge' + } + ]; + break; + case 'Approved': + default: + this.optionArray = []; + } + } + + addOption(option: {name: string, taskPermissionName?: string}) { + this.optionArray.push(option); + } + +} diff --git a/src/app/recurring-deposits/recurring-deposits-routing.module.ts b/src/app/recurring-deposits/recurring-deposits-routing.module.ts new file mode 100644 index 000000000..c4b657beb --- /dev/null +++ b/src/app/recurring-deposits/recurring-deposits-routing.module.ts @@ -0,0 +1,38 @@ +/** Angular Imports */ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +/** Translation Imports */ +import { extract } from '../core/i18n/i18n.service'; + +/** Custom Components */ +import { RecurringDepositsAccountViewComponent } from './recurring-deposits-account-view/recurring-deposits-account-view.component'; + +/** Custom Resolvers */ +import { RecurringDepositsAccountViewResolver } from './common-resolvers/recurring-deposits-account-view.resolver'; + +const routes: Routes = [ + { + path: '', + data: { title: extract('All RecurringDeposits'), breadcrumb: 'RecurringDeposits', routeParamBreadcrumb: false }, + children: [ + { + path: ':recurringDepositAccountId', + data: { title: extract('RecurringDeposit Account View'), routeParamBreadcrumb: 'recurringDepositAccountId' }, + resolve: { + recurringDepositsAccountData: RecurringDepositsAccountViewResolver + }, + component: RecurringDepositsAccountViewComponent + } + ] + } +]; +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], + declarations: [], + providers: [ + RecurringDepositsAccountViewResolver, + ] +}) +export class RecurringDepositsRoutingModule {} diff --git a/src/app/recurring-deposits/recurring-deposits.module.spec.ts b/src/app/recurring-deposits/recurring-deposits.module.spec.ts new file mode 100644 index 000000000..5e980bf94 --- /dev/null +++ b/src/app/recurring-deposits/recurring-deposits.module.spec.ts @@ -0,0 +1,13 @@ +import { RecurringDepositsModule } from './recurring-deposits.module'; + +describe('RecurringDepositsModule', () => { + let recurringDepositsModule: RecurringDepositsModule; + + beforeEach(() => { + recurringDepositsModule = new RecurringDepositsModule(); + }); + + it('should create an instance', () => { + expect(recurringDepositsModule).toBeTruthy(); + }); +}); diff --git a/src/app/recurring-deposits/recurring-deposits.module.ts b/src/app/recurring-deposits/recurring-deposits.module.ts new file mode 100644 index 000000000..d572beadf --- /dev/null +++ b/src/app/recurring-deposits/recurring-deposits.module.ts @@ -0,0 +1,31 @@ +/** Angular Imports */ +import { NgModule } from '@angular/core'; +import { DatePipe } from '@angular/common'; + +/** Custom Modules */ +import { RecurringDepositsRoutingModule } from './recurring-deposits-routing.module'; +import { SharedModule } from 'app/shared/shared.module'; +import { PipesModule } from '../pipes/pipes.module'; +import { DirectivesModule } from '../directives/directives.module'; + +/** Custom Components */ +import { RecurringDepositsAccountViewComponent } from './recurring-deposits-account-view/recurring-deposits-account-view.component'; + +/** + * RecurringDeposits Module + * + * All components related to RecurringDeposits functions should be declared here. + */ +@NgModule({ + imports: [ + SharedModule, + PipesModule, + DirectivesModule, + RecurringDepositsRoutingModule + ], + declarations: [ + RecurringDepositsAccountViewComponent + ], + providers: [DatePipe] +}) +export class RecurringDepositsModule {} diff --git a/src/app/recurring-deposits/recurring-deposits.service.spec.ts b/src/app/recurring-deposits/recurring-deposits.service.spec.ts new file mode 100644 index 000000000..4746bf4a2 --- /dev/null +++ b/src/app/recurring-deposits/recurring-deposits.service.spec.ts @@ -0,0 +1,12 @@ +import { TestBed } from '@angular/core/testing'; + +import { RecurringDepositsService } from './recurring-deposits.service'; + +describe('RecurringDepositsService', () => { + beforeEach(() => TestBed.configureTestingModule({})); + + it('should be created', () => { + const service: RecurringDepositsService = TestBed.get(RecurringDepositsService); + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/recurring-deposits/recurring-deposits.service.ts b/src/app/recurring-deposits/recurring-deposits.service.ts new file mode 100644 index 000000000..8abe9e8d5 --- /dev/null +++ b/src/app/recurring-deposits/recurring-deposits.service.ts @@ -0,0 +1,32 @@ +/** Angular Imports */ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpParams } from '@angular/common/http'; + +/** rxjs Imports */ +import { Observable } from 'rxjs'; + +/** + * RecurringDeposits Service. + */ +@Injectable({ + providedIn: 'root' +}) +export class RecurringDepositsService { + + constructor(private http: HttpClient) {} + + /** + * @param {string} recurringDepositAccountId is recurringDeposit account's Id. + * @returns {Observable} + */ + // getRecurringDepositsTransactionTemplateResource(recurringDepositAccountId: string): Observable { + // return this.http.get(`/recurringDepositsaccounts/${recurringDepositAccountId}/transactions/template`); + // } + + getRecurringDepositsAccountData(recurringDepositAccountId: any) { + const httpParams = new HttpParams() + .set('associations', 'all'); + return this.http.get(`/recurringdepositaccounts/${recurringDepositAccountId}`, { params: httpParams }); + } + +} diff --git a/src/assets/images/recurring-deposits_account_placeholder.png b/src/assets/images/recurring-deposits_account_placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..5bff577f9277ab5bd4e7bfff20ab7d978715d311 GIT binary patch literal 21151 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 S*qXMA5@M`xj<3KuhW!^d_<-5~ literal 0 HcmV?d00001 diff --git a/src/theme/custom/denim-yellowgreen.scss b/src/theme/custom/denim-yellowgreen.scss index 63a3739d9..d969d3fd3 100644 --- a/src/theme/custom/denim-yellowgreen.scss +++ b/src/theme/custom/denim-yellowgreen.scss @@ -8,6 +8,7 @@ @import '../../app/savings/savings-account-view/savings-account-view.component-theme.scss'; @import '../../app/shares/shares-account-view/shares-account-view.component-theme.scss'; @import '../../app/deposits/fixed-deposits/fixed-deposit-account-view/fixed-deposit-account-view.component-theme.scss'; +@import '../../app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component-theme.scss'; // Custom material palette $mat-denim: ( @@ -61,3 +62,4 @@ $mifosx-app-theme: mat-light-theme($mifosx-app-primary, $mifosx-app-accent, $mif @include savings-account-view-component-theme($mifosx-app-theme); @include shares-account-view-component-theme($mifosx-app-theme); @include fixed-deposits-account-view-component-theme($mifosx-app-theme); +@include recurring-deposits-account-view-component-theme($mifosx-app-theme); diff --git a/src/theme/custom/pictonblue-yellowgreen.scss b/src/theme/custom/pictonblue-yellowgreen.scss index 5ebba0b37..478e08001 100644 --- a/src/theme/custom/pictonblue-yellowgreen.scss +++ b/src/theme/custom/pictonblue-yellowgreen.scss @@ -8,6 +8,7 @@ @import '../../app/savings/savings-account-view/savings-account-view.component-theme.scss'; @import '../../app/shares/shares-account-view/shares-account-view.component-theme.scss'; @import '../../app/deposits/fixed-deposits/fixed-deposit-account-view/fixed-deposit-account-view.component-theme.scss'; +@import '../../app/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component-theme.scss'; // Custom material palette $mat-picton-blue: ( @@ -61,3 +62,4 @@ $mifosx-app-theme: mat-light-theme($mifosx-app-primary, $mifosx-app-accent, $mif @include savings-account-view-component-theme($mifosx-app-theme); @include shares-account-view-component-theme($mifosx-app-theme); @include fixed-deposits-account-view-component-theme($mifosx-app-theme); +@include recurring-deposits-account-view-component-theme($mifosx-app-theme);