diff --git a/src/app/account-transfers/create-standing-instructions/create-standing-instructions.component.html b/src/app/account-transfers/create-standing-instructions/create-standing-instructions.component.html index d6d05dcd9..0ddb83ac1 100644 --- a/src/app/account-transfers/create-standing-instructions/create-standing-instructions.component.html +++ b/src/app/account-transfers/create-standing-instructions/create-standing-instructions.component.html @@ -233,7 +233,7 @@ - diff --git a/src/app/account-transfers/edit-standing-instructions/edit-standing-instructions.component.html b/src/app/account-transfers/edit-standing-instructions/edit-standing-instructions.component.html index e754626b3..fbec48785 100644 --- a/src/app/account-transfers/edit-standing-instructions/edit-standing-instructions.component.html +++ b/src/app/account-transfers/edit-standing-instructions/edit-standing-instructions.component.html @@ -160,7 +160,8 @@ - + diff --git a/src/app/account-transfers/list-standing-instructions/list-standing-instructions.component.html b/src/app/account-transfers/list-standing-instructions/list-standing-instructions.component.html index 6b7014384..c27c7534c 100644 --- a/src/app/account-transfers/list-standing-instructions/list-standing-instructions.component.html +++ b/src/app/account-transfers/list-standing-instructions/list-standing-instructions.component.html @@ -35,7 +35,7 @@ - diff --git a/src/app/account-transfers/make-account-transfers/make-account-transfers.component.html b/src/app/account-transfers/make-account-transfers/make-account-transfers.component.html index 2a3ed03f7..10e72305c 100644 --- a/src/app/account-transfers/make-account-transfers/make-account-transfers.component.html +++ b/src/app/account-transfers/make-account-transfers/make-account-transfers.component.html @@ -132,7 +132,7 @@ - diff --git a/src/app/account-transfers/view-standing-instructions/view-standing-instructions.component.html b/src/app/account-transfers/view-standing-instructions/view-standing-instructions.component.html index cce7dc4e8..fd68ca775 100644 --- a/src/app/account-transfers/view-standing-instructions/view-standing-instructions.component.html +++ b/src/app/account-transfers/view-standing-instructions/view-standing-instructions.component.html @@ -3,7 +3,7 @@    Edit - diff --git a/src/app/centers/centers-view/center-actions/center-attendance/center-attendance.component.html b/src/app/centers/centers-view/center-actions/center-attendance/center-attendance.component.html index b884a0fe6..65db3a249 100644 --- a/src/app/centers/centers-view/center-actions/center-attendance/center-attendance.component.html +++ b/src/app/centers/centers-view/center-actions/center-attendance/center-attendance.component.html @@ -41,7 +41,7 @@ - + diff --git a/src/app/centers/centers-view/center-actions/close-center/close-center.component.html b/src/app/centers/centers-view/center-actions/close-center/close-center.component.html index fb714d2e3..e072cb35e 100644 --- a/src/app/centers/centers-view/center-actions/close-center/close-center.component.html +++ b/src/app/centers/centers-view/center-actions/close-center/close-center.component.html @@ -36,7 +36,7 @@ - + diff --git a/src/app/centers/centers-view/centers-view.component.html b/src/app/centers/centers-view/centers-view.component.html index 0b835ddcb..53a26ed77 100644 --- a/src/app/centers/centers-view/centers-view.component.html +++ b/src/app/centers/centers-view/centers-view.component.html @@ -38,8 +38,10 @@

- Next Meeting on: {{centerViewData.collectionMeetingCalendar?.nextTenRecurringDates[0] | date}} -
+ Next Meeting on: {{centerViewData.collectionMeetingCalendar?.nextTenRecurringDates[0] | date}} + +
+
Meeting Frequency: {{centerViewData.collectionMeetingCalendar?.frequency.value | lowercase}}

diff --git a/src/app/centers/centers.component.html b/src/app/centers/centers.component.html index efa5e093b..8ab1b3ace 100644 --- a/src/app/centers/centers.component.html +++ b/src/app/centers/centers.component.html @@ -11,10 +11,10 @@
- -
diff --git a/src/app/centers/create-center/create-center.component.html b/src/app/centers/create-center/create-center.component.html index c6b6803cc..019d994bc 100644 --- a/src/app/centers/create-center/create-center.component.html +++ b/src/app/centers/create-center/create-center.component.html @@ -119,7 +119,7 @@ - + diff --git a/src/app/loans/common-resolvers/loan-details-charges.resolver.ts b/src/app/loans/common-resolvers/loan-details-charges.resolver.ts index 1dcf09640..424c83181 100644 --- a/src/app/loans/common-resolvers/loan-details-charges.resolver.ts +++ b/src/app/loans/common-resolvers/loan-details-charges.resolver.ts @@ -24,7 +24,7 @@ export class LoanDetailsChargesResolver implements Resolve { * @returns {Observable} */ resolve(route: ActivatedRouteSnapshot): Observable { - const loanId = route.parent.paramMap.get('loanId'); + const loanId = route.parent.parent.paramMap.get('loanId'); return this.loansService.getLoanAccountAssociationDetails(loanId); } diff --git a/src/app/loans/common-resolvers/loans-account-charge.resolver.ts b/src/app/loans/common-resolvers/loans-account-charge.resolver.ts new file mode 100644 index 000000000..955a94fd2 --- /dev/null +++ b/src/app/loans/common-resolvers/loans-account-charge.resolver.ts @@ -0,0 +1,33 @@ +/** Angular Imports */ +import { Injectable } from '@angular/core'; +import { Resolve, ActivatedRouteSnapshot } from '@angular/router'; + +/** rxjs Imports */ +import { Observable } from 'rxjs'; + +/** Custom Services */ +import { LoansService } from '../loans.service'; + +/** + * Loans Account Charge data resolver. + */ +@Injectable() +export class LoansAccountChargeResolver implements Resolve { + + /** + * @param {LoansService} LoansService Loans service. + */ + constructor(private loansService: LoansService) { } + + /** + * Returns the Loans Account Charge data. + * @param {ActivatedRouteSnapshot} route Route Snapshot + * @returns {Observable} + */ + resolve(route: ActivatedRouteSnapshot): Observable { + const loanAccountId = route.parent.parent.paramMap.get('loanId'); + const chargeId = route.paramMap.get('id'); + return this.loansService.getLoansAccountCharge(loanAccountId, chargeId); + } + +} diff --git a/src/app/loans/custom-dialog/loan-account-load-documents-dialog/loan-account-load-documents-dialog.component.html b/src/app/loans/custom-dialog/loan-account-load-documents-dialog/loan-account-load-documents-dialog.component.html index a63e520e8..ec2f548b1 100644 --- a/src/app/loans/custom-dialog/loan-account-load-documents-dialog/loan-account-load-documents-dialog.component.html +++ b/src/app/loans/custom-dialog/loan-account-load-documents-dialog/loan-account-load-documents-dialog.component.html @@ -20,7 +20,7 @@ - diff --git a/src/app/loans/loans-routing.module.ts b/src/app/loans/loans-routing.module.ts index 1ee270e7e..83f3eb1f6 100644 --- a/src/app/loans/loans-routing.module.ts +++ b/src/app/loans/loans-routing.module.ts @@ -35,6 +35,8 @@ import { LoanActionButtonResolver } from './common-resolvers/loan-action-button. import { LoansAccountTemplateResolver } from './common-resolvers/loans-account-template.resolver'; import { LoanDocumentsResolver } from './common-resolvers/loan-documents.resolver'; import { LoansAccountAndTemplateResolver } from './common-resolvers/loans-account-and-template.resolver'; +import { LoansAccountChargeResolver } from './common-resolvers/loans-account-charge.resolver'; +import { ViewChargeComponent } from './loans-view/view-charge/view-charge.component'; /** Loans Route. */ const routes: Routes = [ @@ -128,11 +130,24 @@ const routes: Routes = [ }, { path: 'charges', - component: ChargesTabComponent, - data: { title: extract('Charges'), breadcrumb: 'Charges', routeParamBreadcrumb: false }, - resolve: { - loanDetailsAssociationData: LoanDetailsChargesResolver - } + data: { title: extract('Loans Account Charges'), breadcrumb: 'Charges', routeParamBreadcrumb: false }, + children: [ + { + path: '', + component: ChargesTabComponent, + resolve: { + loanDetailsAssociationData: LoanDetailsChargesResolver + } + }, + { + path: ':id', + data: { routeParamBreadcrumb: 'id' }, + component: ViewChargeComponent, + resolve: { + loansAccountCharge: LoansAccountChargeResolver + } + } + ] }, { path: 'loan-documents', @@ -206,7 +221,8 @@ const routes: Routes = [ LoanActionButtonResolver, LoansAccountTemplateResolver, LoanDocumentsResolver, - LoansAccountAndTemplateResolver + LoansAccountAndTemplateResolver, + LoansAccountChargeResolver ] }) diff --git a/src/app/loans/loans-view/charges-tab/charges-tab.component.html b/src/app/loans/loans-view/charges-tab/charges-tab.component.html index cfd1234a8..999e7cdbe 100644 --- a/src/app/loans/loans-view/charges-tab/charges-tab.component.html +++ b/src/app/loans/loans-view/charges-tab/charges-tab.component.html @@ -1,4 +1,4 @@ -
+
@@ -52,24 +52,30 @@ - - +
Actions - - - - + + + + + + +
diff --git a/src/app/loans/loans-view/charges-tab/charges-tab.component.scss b/src/app/loans/loans-view/charges-tab/charges-tab.component.scss index ca97dafbe..558da7bc2 100644 --- a/src/app/loans/loans-view/charges-tab/charges-tab.component.scss +++ b/src/app/loans/loans-view/charges-tab/charges-tab.component.scss @@ -1,4 +1,20 @@ -table { +.tab-container { + padding: 1%; + margin: 1%; + h3 { + margin:1% auto; + } + table { width: 100%; margin-top: 3%; + .account-action-button{ + min-width: 26px; + padding: 0 6px; + margin: 4px; + line-height: 25px; + } + .select-row:hover { + cursor: pointer; + } + } } diff --git a/src/app/loans/loans-view/charges-tab/charges-tab.component.ts b/src/app/loans/loans-view/charges-tab/charges-tab.component.ts index b1e77a783..1a4f290c1 100644 --- a/src/app/loans/loans-view/charges-tab/charges-tab.component.ts +++ b/src/app/loans/loans-view/charges-tab/charges-tab.component.ts @@ -1,7 +1,21 @@ /** Angular Imports */ import { Component, OnInit, ViewChild } from '@angular/core'; -import { MatTableDataSource, MatPaginator, MatSort } from '@angular/material'; -import { ActivatedRoute } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; +import { MatDialog, MatTableDataSource, MatTable, MatPaginator, MatSort } from '@angular/material'; +import { DatePipe } from '@angular/common'; + +/** Custom Services */ +import { LoansService } from 'app/loans/loans.service'; + +/** Custom Dialogs */ +import { FormDialogComponent } from 'app/shared/form-dialog/form-dialog.component'; +import { DeleteDialogComponent } from 'app/shared/delete-dialog/delete-dialog.component'; +import { ConfirmationDialogComponent } from 'app/shared/confirmation-dialog/confirmation-dialog.component'; + +/** Custom Models */ +import { FormfieldBase } from 'app/shared/form-dialog/formfield/model/formfield-base'; +import { InputBase } from 'app/shared/form-dialog/formfield/model/input-base'; +import { DatepickerBase } from 'app/shared/form-dialog/formfield/model/datepicker-base'; @Component({ selector: 'mifosx-charges-tab', @@ -30,7 +44,11 @@ export class ChargesTabComponent implements OnInit { * Retrieves the loans data from `resolve`. * @param {ActivatedRoute} route Activated Route. */ - constructor(private route: ActivatedRoute) { + constructor(private loansService: LoansService, + private route: ActivatedRoute, + private datePipe: DatePipe, + private router: Router, + public dialog: MatDialog) { this.route.data.subscribe(( data: { loanDetailsAssociationData: any }) => { this.loanDetails = data.loanDetailsAssociationData; }); @@ -54,4 +72,139 @@ export class ChargesTabComponent implements OnInit { this.dataSource.sort = this.sort; } + /** + * Pays the charge. + * @param {any} chargeId Charge Id + */ + payCharge(chargeId: any) { + const formfields: FormfieldBase[] = [ + new InputBase({ + controlName: 'amount', + label: 'Amount', + value: '', + type: 'number', + required: true + }), + new DatepickerBase({ + controlName: 'dueDate', + label: 'Payment Date', + value: '', + type: 'date', + required: true + }) + ]; + const data = { + title: `Pay Charge ${chargeId}`, + layout: { addButtonText: 'Confirm' }, + formfields: formfields + }; + const payChargeDialogRef = this.dialog.open(FormDialogComponent, { data }); + payChargeDialogRef.afterClosed().subscribe((response: any) => { + if (response.data) { + const locale = 'en'; + const dateFormat = 'dd MMMM yyyy'; + const dataObject = { + ...response.data.value, + dueDate: this.datePipe.transform(response.data.value.dueDate, dateFormat), + dateFormat, + locale + }; + this.loansService.executeLoansAccountChargesCommand(this.loanDetails.id, 'paycharge', dataObject, chargeId) + .subscribe(() => { + this.reload(); + }); + } + }); + } + + /** + * Waive's the charge + * @param {any} chargeId Charge Id + */ + waiveCharge(chargeId: any) { + const waiveChargeDialogRef = this.dialog.open(ConfirmationDialogComponent, { data: { heading: 'Waive Charge', dialogContext: `Are you sure you want to waive charge with id: ${chargeId}`, type: 'Basic' } }); + waiveChargeDialogRef.afterClosed().subscribe((response: any) => { + if (response.confirm) { + this.loansService.executeLoansAccountChargesCommand(this.loanDetails.id, 'waive', {}, chargeId) + .subscribe(() => { + this.reload(); + }); + } + }); + } + + /** + * Edits the charge + * @param {any} charge Charge + */ + editCharge(charge: any) { + const formfields: FormfieldBase[] = [ + new InputBase({ + controlName: 'amount', + label: 'Amount', + value: charge.amount || charge.amountOrPercentage, + type: 'number', + required: true + }) + ]; + const data = { + title: `Edit Charge ${charge.id}`, + layout: { addButtonText: 'Confirm' }, + formfields: formfields + }; + const editChargeDialogRef = this.dialog.open(FormDialogComponent, { data }); + editChargeDialogRef.afterClosed().subscribe((response: any) => { + if (response.data) { + const locale = 'en'; + const dateFormat = 'dd MMMM yyyy'; + const dataObject = { + ...response.data.value, + dateFormat, + locale + }; + this.loansService.editLoansAccountCharge(this.loanDetails.id, dataObject, charge.id) + .subscribe(() => { + this.reload(); + }); + } + }); + } + + /** + * Deletes the charge + * @param {any} chargeId Charge Id + */ + deleteCharge(chargeId: any) { + const deleteChargeDialogRef = this.dialog.open(DeleteDialogComponent, { + data: { deleteContext: `charge id:${chargeId}` } + }); + deleteChargeDialogRef.afterClosed().subscribe((response: any) => { + if (response.delete) { + this.loansService.deleteLoansAccountCharge(this.loanDetails.id, chargeId) + .subscribe(() => { + this.reload(); + }); + } + }); + } + + /** + * Stops the propagation to view charge page. + * @param $event Mouse Event + */ + routeEdit($event: MouseEvent) { + $event.stopPropagation(); + } + + /** + * Refetches data fot the component + * TODO: Replace by a custom reload component instead of hard-coded back-routing. + */ + private reload() { + const clientId = this.loanDetails.clientId; + const url: string = this.router.url; + this.router.navigateByUrl(`/clients/${clientId}/loans`, { skipLocationChange: true }) + .then(() => this.router.navigate([url])); + } + } diff --git a/src/app/loans/loans-view/loan-account-actions/add-loan-charge/add-loan-charge.component.html b/src/app/loans/loans-view/loan-account-actions/add-loan-charge/add-loan-charge.component.html index 1e064b05f..a87f96b61 100644 --- a/src/app/loans/loans-view/loan-account-actions/add-loan-charge/add-loan-charge.component.html +++ b/src/app/loans/loans-view/loan-account-actions/add-loan-charge/add-loan-charge.component.html @@ -48,7 +48,7 @@ - + diff --git a/src/app/loans/loans-view/loan-account-actions/view-guarantors/view-guarantors.component.html b/src/app/loans/loans-view/loan-account-actions/view-guarantors/view-guarantors.component.html index a6c0e717d..a831a6a6e 100644 --- a/src/app/loans/loans-view/loan-account-actions/view-guarantors/view-guarantors.component.html +++ b/src/app/loans/loans-view/loan-account-actions/view-guarantors/view-guarantors.component.html @@ -150,7 +150,7 @@ Action - + +
+ +
+ + +
+ +
+ + + + + +
+ +
+ Name +
+ +
+ {{ chargeData.name }} +
+ +
+ Charge Type +
+ +
+ {{ chargeData.penalty ? 'Penalty' : 'Fees' }} +
+ +
+ Currency +
+ +
+ {{ chargeData.currency.displayLabel }} +
+ +
+ Payment due at +
+ +
+ {{ chargeData.chargeTimeType.value }} +
+ +
+ Payment due as of +
+ +
+ {{ chargeData.dueDate | date }} +
+ +
+ Calculation Type +
+ +
+ {{ chargeData.chargeCalculationType.value }} +
+ +
+ Due +
+ +
+ {{ chargeData.amount }} +
+ +
+ Paid +
+ +
+ {{ chargeData.amountPaid }} +
+ +
+ Waived +
+ +
+ {{ chargeData.amountWaived }} +
+ +
+ Outstanding +
+ +
+ {{ chargeData.amountOutstanding }} +
+ +
+ +
+ +
+ +
diff --git a/src/app/loans/loans-view/view-charge/view-charge.component.scss b/src/app/loans/loans-view/view-charge/view-charge.component.scss new file mode 100644 index 000000000..56668f14f --- /dev/null +++ b/src/app/loans/loans-view/view-charge/view-charge.component.scss @@ -0,0 +1,10 @@ +.container { + max-width: 37rem; + + .content { + div { + margin: 1rem 0; + word-wrap: break-word; + } + } +} diff --git a/src/app/loans/loans-view/view-charge/view-charge.component.spec.ts b/src/app/loans/loans-view/view-charge/view-charge.component.spec.ts new file mode 100644 index 000000000..6c6e3739c --- /dev/null +++ b/src/app/loans/loans-view/view-charge/view-charge.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ViewChargeComponent } from './view-charge.component'; + +describe('ViewChargeComponent', () => { + let component: ViewChargeComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ViewChargeComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ViewChargeComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/loans/loans-view/view-charge/view-charge.component.ts b/src/app/loans/loans-view/view-charge/view-charge.component.ts new file mode 100644 index 000000000..0d9cb8dd1 --- /dev/null +++ b/src/app/loans/loans-view/view-charge/view-charge.component.ts @@ -0,0 +1,179 @@ +/** Angular Imports */ +import { Component } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { MatDialog } from '@angular/material'; +import { DatePipe } from '@angular/common'; + +/** Custom Services */ +import { LoansService } from 'app/loans/loans.service'; + +/** Custom Dialogs */ +import { FormDialogComponent } from 'app/shared/form-dialog/form-dialog.component'; +import { DeleteDialogComponent } from 'app/shared/delete-dialog/delete-dialog.component'; +import { ConfirmationDialogComponent } from 'app/shared/confirmation-dialog/confirmation-dialog.component'; + +/** Custom Models */ +import { FormfieldBase } from 'app/shared/form-dialog/formfield/model/formfield-base'; +import { InputBase } from 'app/shared/form-dialog/formfield/model/input-base'; +import { DatepickerBase } from 'app/shared/form-dialog/formfield/model/datepicker-base'; + +/** + * View Charge Component. + */ +@Component({ + selector: 'mifosx-view-charge', + templateUrl: './view-charge.component.html', + styleUrls: ['./view-charge.component.scss'] +}) +export class ViewChargeComponent { + + /** Charge data. */ + chargeData: any; + /** Loans Account Data */ + loansAccountData: any; + + /** + * Retrieves the Charge data from `resolve`. + * @param {LoansService} loansService Loans Service + * @param {ActivatedRoute} route Activated Route. + * @param {Router} router Router for navigation. + * @param {MatDialog} dialog Dialog reference. + * @param {DatePipe} datePipe DatePipe. + */ + constructor(private loansService: LoansService, + private route: ActivatedRoute, + private datePipe: DatePipe, + private router: Router, + public dialog: MatDialog) { + this.route.data.subscribe((data: { loansAccountCharge: any }) => { + this.chargeData = data.loansAccountCharge; + }); + this.route.parent.parent.data.subscribe((data: { loanDetailsData: any }) => { + this.loansAccountData = data.loanDetailsData; + }); + } + + /** + * Pays the charge. + */ + payCharge() { + const formfields: FormfieldBase[] = [ + new InputBase({ + controlName: 'amount', + label: 'Amount', + value: '', + type: 'number', + required: true + }), + new DatepickerBase({ + controlName: 'dueDate', + label: 'Payment Date', + value: '', + type: 'date', + required: true + }) + ]; + const data = { + title: 'Pay Charge', + layout: { addButtonText: 'Confirm' }, + formfields: formfields + }; + const payChargeDialogRef = this.dialog.open(FormDialogComponent, { data }); + payChargeDialogRef.afterClosed().subscribe((response: any) => { + if (response.data) { + const locale = 'en'; + const dateFormat = 'dd MMMM yyyy'; + const dataObject = { + ...response.data.value, + dueDate: this.datePipe.transform(response.data.value.dueDate, dateFormat), + dateFormat, + locale + }; + this.loansService.executeLoansAccountChargesCommand(this.chargeData.accountId, 'paycharge', dataObject, this.chargeData.id) + .subscribe(() => { + this.reload(); + }); + } + }); + } + + /** + * Waive's the charge + */ + waiveCharge() { + const waiveChargeDialogRef = this.dialog.open(ConfirmationDialogComponent, { data: { heading: 'Waive Charge', dialogContext: `Are you sure you want to waive charge with id: ${this.chargeData.id}`, type: 'Basic' } }); + waiveChargeDialogRef.afterClosed().subscribe((response: any) => { + if (response.confirm) { + this.loansService.executeLoansAccountChargesCommand(this.chargeData.accountId, 'waive', {}, this.chargeData.id) + .subscribe(() => { + this.reload(); + }); + } + }); + } + + /** + * Edits the charge + */ + editCharge() { + const formfields: FormfieldBase[] = [ + new InputBase({ + controlName: 'amount', + label: 'Amount', + value: this.chargeData.amount || this.chargeData.amountOrPercentage, + type: 'number', + required: true + }) + ]; + const data = { + title: 'Edit Charge', + layout: { addButtonText: 'Confirm' }, + formfields: formfields + }; + const editChargeDialogRef = this.dialog.open(FormDialogComponent, { data }); + editChargeDialogRef.afterClosed().subscribe((response: any) => { + if (response.data) { + const locale = 'en'; + const dateFormat = 'dd MMMM yyyy'; + const dataObject = { + ...response.data.value, + dateFormat, + locale + }; + this.loansService.editLoansAccountCharge(this.loansAccountData.id, dataObject, this.chargeData.id) + .subscribe(() => { + this.reload(); + }); + } + }); + } + + /** + * Deletes the charge + */ + deleteCharge() { + const deleteChargeDialogRef = this.dialog.open(DeleteDialogComponent, { + data: { deleteContext: `charge id:${this.chargeData.id}` } + }); + deleteChargeDialogRef.afterClosed().subscribe((response: any) => { + if (response.delete) { + this.loansService.deleteLoansAccountCharge(this.loansAccountData.id, this.chargeData.id) + .subscribe(() => { + this.reload(); + }); + } + }); + } + + /** + * Refetches data fot the component + * TODO: Replace by a custom reload component instead of hard-coded back-routing. + */ + private reload() { + const clientId = this.loansAccountData.clientId; + const url: string = this.router.url.replace(`/${this.chargeData.id}`, ''); + this.router.navigateByUrl(`/clients/${clientId}/loansaccounts`, {skipLocationChange: true}) + .then(() => this.router.navigate([url])); + } + +} diff --git a/src/app/loans/loans.module.ts b/src/app/loans/loans.module.ts index 0dc4fd5e9..f865eb03d 100644 --- a/src/app/loans/loans.module.ts +++ b/src/app/loans/loans.module.ts @@ -51,16 +51,17 @@ import { WithdrawnByClientComponent } from './loans-view/loan-account-actions/wi import { UndoDisbursalComponent } from './loans-view/loan-account-actions/undo-disbursal/undo-disbursal.component'; import { AddCollateralComponent } from './loans-view/loan-account-actions/add-collateral/add-collateral.component'; import { LoanDocumentsTabComponent } from './loans-view/loan-documents-tab/loan-documents-tab.component'; +import { ViewChargeComponent } from './loans-view/view-charge/view-charge.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'; +import { ApproveLoanComponent } from './loans-view/loan-account-actions/approve-loan/approve-loan.component'; /** Dialog Components */ 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 { 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'; -import { ApproveLoanComponent } from './loans-view/loan-account-actions/approve-loan/approve-loan.component'; /** * Loans Module @@ -119,7 +120,8 @@ import { ApproveLoanComponent } from './loans-view/loan-account-actions/approve- StandingInstructionsTabComponent, EditLoansAccountComponent, LoanScreenReportsComponent, - ApproveLoanComponent + ApproveLoanComponent, + ViewChargeComponent ], entryComponents: [ LoansAccountAddCollateralDialogComponent, diff --git a/src/app/loans/loans.service.ts b/src/app/loans/loans.service.ts index 3c04f51bb..366a54905 100644 --- a/src/app/loans/loans.service.ts +++ b/src/app/loans/loans.service.ts @@ -364,4 +364,44 @@ export class LoansService { return this.http.get(`/loans/${loanId}/guarantors/accounts/template`, { params: httpParams }); } + /** + * @param {string} accountId loans account Id + * @param {string} chargeId loans charge Id + * @returns {Observable} + */ + getLoansAccountCharge(accountId: string, chargeId: string): Observable { + return this.http.get(`/loans/${accountId}/charges/${chargeId}`); + } + + /** + * @param {string} accountId Loans Account Id + * @param {string} command Command + * @param {any} data Data + * @param {string} chargeId Charge Id + * @returns {Observable} + */ + executeLoansAccountChargesCommand(accountId: string, command: string, data: any, chargeId: any): Observable { + const httpParams = new HttpParams().set('command', command); + return this.http.post(`/loans/${accountId}/charges/${chargeId}`, data, { params: httpParams }); + } + + /** + * @param {string} accountId Loans Account Id + * @param {any} data Charge Data + * @param {any} chargeId Charge Id + * @returns {Observable} + */ + editLoansAccountCharge(accountId: string, data: any, chargeId: any): Observable { + return this.http.put(`/loans/${accountId}/charges/${chargeId}`, data); + } + + /** + * @param {string} accountId Loans Account Id + * @param {any} chargeId Charge Id + * @returns {Observable} + */ + deleteLoansAccountCharge(accountId: string, chargeId: any): Observable { + return this.http.delete(`/loans/${accountId}/charges/${chargeId}`); + } + } diff --git a/src/app/products/fixed-deposit-products/fixed-deposit-products.component.html b/src/app/products/fixed-deposit-products/fixed-deposit-products.component.html index ebe9ba35c..f5050814a 100644 --- a/src/app/products/fixed-deposit-products/fixed-deposit-products.component.html +++ b/src/app/products/fixed-deposit-products/fixed-deposit-products.component.html @@ -1,5 +1,5 @@
- diff --git a/src/app/products/floating-rates/create-floating-rate/create-floating-rate.component.html b/src/app/products/floating-rates/create-floating-rate/create-floating-rate.component.html index 2fbf18c73..edceff04d 100644 --- a/src/app/products/floating-rates/create-floating-rate/create-floating-rate.component.html +++ b/src/app/products/floating-rates/create-floating-rate/create-floating-rate.component.html @@ -90,7 +90,7 @@ - + diff --git a/src/app/products/floating-rates/floating-rates.component.html b/src/app/products/floating-rates/floating-rates.component.html index 7e11c49e3..c9e4d2deb 100644 --- a/src/app/products/floating-rates/floating-rates.component.html +++ b/src/app/products/floating-rates/floating-rates.component.html @@ -1,5 +1,5 @@
- diff --git a/src/app/products/floating-rates/view-floating-rate/view-floating-rate.component.html b/src/app/products/floating-rates/view-floating-rate/view-floating-rate.component.html index 1d72fc6d1..c068bf223 100644 --- a/src/app/products/floating-rates/view-floating-rate/view-floating-rate.component.html +++ b/src/app/products/floating-rates/view-floating-rate/view-floating-rate.component.html @@ -1,6 +1,6 @@
- diff --git a/src/app/products/loan-products/loan-products.component.html b/src/app/products/loan-products/loan-products.component.html index e5b98c4de..d5ff22017 100644 --- a/src/app/products/loan-products/loan-products.component.html +++ b/src/app/products/loan-products/loan-products.component.html @@ -1,5 +1,5 @@
- diff --git a/src/app/products/loan-products/view-loan-product/view-loan-product.component.html b/src/app/products/loan-products/view-loan-product/view-loan-product.component.html index f2ea80dcd..3bc1d20a9 100644 --- a/src/app/products/loan-products/view-loan-product/view-loan-product.component.html +++ b/src/app/products/loan-products/view-loan-product/view-loan-product.component.html @@ -1,5 +1,5 @@
- diff --git a/src/app/products/manage-tax-components/create-tax-component/create-tax-component.component.html b/src/app/products/manage-tax-components/create-tax-component/create-tax-component.component.html index 0888cfd7b..aa9bad93a 100644 --- a/src/app/products/manage-tax-components/create-tax-component/create-tax-component.component.html +++ b/src/app/products/manage-tax-components/create-tax-component/create-tax-component.component.html @@ -86,7 +86,7 @@ - + diff --git a/src/app/products/manage-tax-components/edit-tax-component/edit-tax-component.component.html b/src/app/products/manage-tax-components/edit-tax-component/edit-tax-component.component.html index 92c27e7d0..1ca9fce8f 100644 --- a/src/app/products/manage-tax-components/edit-tax-component/edit-tax-component.component.html +++ b/src/app/products/manage-tax-components/edit-tax-component/edit-tax-component.component.html @@ -50,7 +50,7 @@ - + diff --git a/src/app/products/manage-tax-components/manage-tax-components.component.html b/src/app/products/manage-tax-components/manage-tax-components.component.html index cad53b36d..b51419ffe 100644 --- a/src/app/products/manage-tax-components/manage-tax-components.component.html +++ b/src/app/products/manage-tax-components/manage-tax-components.component.html @@ -1,5 +1,5 @@
- diff --git a/src/app/products/manage-tax-components/view-tax-component/view-tax-component.component.html b/src/app/products/manage-tax-components/view-tax-component/view-tax-component.component.html index 577478c84..5aa7fe2a7 100644 --- a/src/app/products/manage-tax-components/view-tax-component/view-tax-component.component.html +++ b/src/app/products/manage-tax-components/view-tax-component/view-tax-component.component.html @@ -1,5 +1,5 @@
- diff --git a/src/app/products/manage-tax-configurations/manage-tax-configurations.component.html b/src/app/products/manage-tax-configurations/manage-tax-configurations.component.html index bda3b63ee..56ca53186 100644 --- a/src/app/products/manage-tax-configurations/manage-tax-configurations.component.html +++ b/src/app/products/manage-tax-configurations/manage-tax-configurations.component.html @@ -8,7 +8,7 @@ - + @@ -24,7 +24,7 @@ - + diff --git a/src/app/products/manage-tax-groups/create-tax-group/create-tax-group.component.html b/src/app/products/manage-tax-groups/create-tax-group/create-tax-group.component.html index 98386d920..e4ba935f0 100644 --- a/src/app/products/manage-tax-groups/create-tax-group/create-tax-group.component.html +++ b/src/app/products/manage-tax-groups/create-tax-group/create-tax-group.component.html @@ -65,7 +65,7 @@ - + diff --git a/src/app/products/manage-tax-groups/edit-tax-group/edit-tax-group.component.html b/src/app/products/manage-tax-groups/edit-tax-group/edit-tax-group.component.html index a2a3092d6..3d82847a6 100644 --- a/src/app/products/manage-tax-groups/edit-tax-group/edit-tax-group.component.html +++ b/src/app/products/manage-tax-groups/edit-tax-group/edit-tax-group.component.html @@ -71,7 +71,7 @@ - + diff --git a/src/app/products/products.component.html b/src/app/products/products.component.html index c362cfbb8..86b03a26e 100644 --- a/src/app/products/products.component.html +++ b/src/app/products/products.component.html @@ -8,7 +8,7 @@ - + @@ -16,7 +16,7 @@

Add new loan product or modify or inactivate loan product

- + @@ -24,7 +24,7 @@

Add new savings product or modify or inactivate savings product

- + @@ -32,7 +32,7 @@

Add new share product or modify or inactivate share product

- + @@ -48,7 +48,7 @@ - + @@ -56,7 +56,7 @@

Defines rules for taking multiple rules

- + @@ -64,7 +64,7 @@

Add, modify or inactivate a Fixed deposit product

- + @@ -72,7 +72,7 @@

Add, modify or inactivate a Recurring Deposit product

- + @@ -80,7 +80,7 @@

Define Tax components and Tax groups

- + diff --git a/src/app/products/saving-products/create-saving-product/create-saving-product.component.html b/src/app/products/saving-products/create-saving-product/create-saving-product.component.html index 9ca121207..19ab14d9f 100644 --- a/src/app/products/saving-products/create-saving-product/create-saving-product.component.html +++ b/src/app/products/saving-products/create-saving-product/create-saving-product.component.html @@ -88,6 +88,7 @@ [savingProductsTemplate]="savingProductsTemplate" [accountingRuleData]="accountingRuleData" [savingProduct]="savingProduct" + [taskPermission]='"CREATE_SAVINGSPRODUCT"' (submit)="submit()" > diff --git a/src/app/products/saving-products/edit-saving-product/edit-saving-product.component.html b/src/app/products/saving-products/edit-saving-product/edit-saving-product.component.html index 1ae8546eb..4179d201c 100644 --- a/src/app/products/saving-products/edit-saving-product/edit-saving-product.component.html +++ b/src/app/products/saving-products/edit-saving-product/edit-saving-product.component.html @@ -88,6 +88,7 @@ [savingProductsTemplate]="savingProductAndTemplate" [accountingRuleData]="accountingRuleData" [savingProduct]="savingProduct" + [taskPermission]='"UPDATE_SAVINGSPRODUCT"' (submit)="submit()" > diff --git a/src/app/products/saving-products/saving-product-stepper/saving-product-preview-step/saving-product-preview-step.component.html b/src/app/products/saving-products/saving-product-stepper/saving-product-preview-step/saving-product-preview-step.component.html index f8669680d..1659e48d7 100644 --- a/src/app/products/saving-products/saving-product-stepper/saving-product-preview-step/saving-product-preview-step.component.html +++ b/src/app/products/saving-products/saving-product-stepper/saving-product-preview-step/saving-product-preview-step.component.html @@ -341,7 +341,7 @@ -
diff --git a/src/app/products/saving-products/saving-product-stepper/saving-product-preview-step/saving-product-preview-step.component.ts b/src/app/products/saving-products/saving-product-stepper/saving-product-preview-step/saving-product-preview-step.component.ts index 931a35e2e..4e663f609 100644 --- a/src/app/products/saving-products/saving-product-stepper/saving-product-preview-step/saving-product-preview-step.component.ts +++ b/src/app/products/saving-products/saving-product-stepper/saving-product-preview-step/saving-product-preview-step.component.ts @@ -10,6 +10,7 @@ export class SavingProductPreviewStepComponent implements OnInit { @Input() savingProductsTemplate: any; @Input() accountingRuleData: any; @Input() savingProduct: any; + @Input() taskPermission: string; @Output() submit = new EventEmitter(); chargesDisplayedColumns: string[] = ['name', 'chargeCalculationType', 'amount', 'chargeTimeType']; diff --git a/src/app/products/saving-products/saving-products.component.html b/src/app/products/saving-products/saving-products.component.html index b8ee761fa..1c2495873 100644 --- a/src/app/products/saving-products/saving-products.component.html +++ b/src/app/products/saving-products/saving-products.component.html @@ -1,5 +1,5 @@
- diff --git a/src/app/products/saving-products/view-saving-product/view-saving-product.component.html b/src/app/products/saving-products/view-saving-product/view-saving-product.component.html index 4233a7fd1..42f771292 100644 --- a/src/app/products/saving-products/view-saving-product/view-saving-product.component.html +++ b/src/app/products/saving-products/view-saving-product/view-saving-product.component.html @@ -1,5 +1,5 @@
- diff --git a/src/app/products/share-products/create-share-product/create-share-product.component.html b/src/app/products/share-products/create-share-product/create-share-product.component.html index 70263bb53..71d818a96 100644 --- a/src/app/products/share-products/create-share-product/create-share-product.component.html +++ b/src/app/products/share-products/create-share-product/create-share-product.component.html @@ -95,6 +95,7 @@ [shareProductsTemplate]="shareProductsTemplate" [accountingRuleData]="accountingRuleData" [shareProduct]="shareProduct" + [taskPermission]='"CREATE_SHAREPRODUCT"' (submit)="submit()" > diff --git a/src/app/products/share-products/dividends-share-product/dividends.component.html b/src/app/products/share-products/dividends-share-product/dividends.component.html index 1ea7f0899..541b953fb 100644 --- a/src/app/products/share-products/dividends-share-product/dividends.component.html +++ b/src/app/products/share-products/dividends-share-product/dividends.component.html @@ -1,5 +1,5 @@
- diff --git a/src/app/products/share-products/edit-share-product/edit-share-product.component.html b/src/app/products/share-products/edit-share-product/edit-share-product.component.html index 28eaf84fb..77ac1554c 100644 --- a/src/app/products/share-products/edit-share-product/edit-share-product.component.html +++ b/src/app/products/share-products/edit-share-product/edit-share-product.component.html @@ -95,6 +95,7 @@ [shareProductsTemplate]="shareProductAndTemplate" [accountingRuleData]="accountingRuleData" [shareProduct]="shareProduct" + [taskPermission]='"UPDATE_SHAREPRODUCT"' (submit)="submit()" > diff --git a/src/app/products/share-products/share-product-stepper/share-product-preview-step/share-product-preview-step.component.html b/src/app/products/share-products/share-product-stepper/share-product-preview-step/share-product-preview-step.component.html index a3d19adaa..f804b0703 100644 --- a/src/app/products/share-products/share-product-stepper/share-product-preview-step/share-product-preview-step.component.html +++ b/src/app/products/share-products/share-product-stepper/share-product-preview-step/share-product-preview-step.component.html @@ -208,7 +208,7 @@ -
diff --git a/src/app/products/share-products/share-product-stepper/share-product-preview-step/share-product-preview-step.component.ts b/src/app/products/share-products/share-product-stepper/share-product-preview-step/share-product-preview-step.component.ts index 715d5d32f..0310cf296 100644 --- a/src/app/products/share-products/share-product-stepper/share-product-preview-step/share-product-preview-step.component.ts +++ b/src/app/products/share-products/share-product-stepper/share-product-preview-step/share-product-preview-step.component.ts @@ -10,6 +10,7 @@ export class ShareProductPreviewStepComponent implements OnInit { @Input() shareProductsTemplate: any; @Input() accountingRuleData: any; @Input() shareProduct: any; + @Input() taskPermission: string; @Output() submit = new EventEmitter(); marketPriceDisplayedColumns: string[] = ['fromDate', 'shareValue']; diff --git a/src/app/products/share-products/share-products.component.html b/src/app/products/share-products/share-products.component.html index f2d59c210..2e8188a5a 100644 --- a/src/app/products/share-products/share-products.component.html +++ b/src/app/products/share-products/share-products.component.html @@ -1,5 +1,5 @@
- diff --git a/src/app/products/share-products/view-share-product/view-share-product.component.html b/src/app/products/share-products/view-share-product/view-share-product.component.html index dd18b98fa..5ea36ba6a 100644 --- a/src/app/products/share-products/view-share-product/view-share-product.component.html +++ b/src/app/products/share-products/view-share-product/view-share-product.component.html @@ -1,9 +1,9 @@
- - diff --git a/src/app/system/configure-maker-checker-tasks/configure-maker-checker-tasks.component.html b/src/app/system/configure-maker-checker-tasks/configure-maker-checker-tasks.component.html index 3a73500f4..6b6cfede2 100644 --- a/src/app/system/configure-maker-checker-tasks/configure-maker-checker-tasks.component.html +++ b/src/app/system/configure-maker-checker-tasks/configure-maker-checker-tasks.component.html @@ -1,5 +1,5 @@
- @@ -23,6 +23,8 @@
+ +
@@ -45,7 +47,7 @@
- +
diff --git a/src/app/system/entity-to-entity-mapping/entity-to-entity-mapping.component.html b/src/app/system/entity-to-entity-mapping/entity-to-entity-mapping.component.html index 61d30dbca..8aab5e5b8 100644 --- a/src/app/system/entity-to-entity-mapping/entity-to-entity-mapping.component.html +++ b/src/app/system/entity-to-entity-mapping/entity-to-entity-mapping.component.html @@ -104,7 +104,7 @@ - @@ -114,7 +114,7 @@ - @@ -182,7 +182,7 @@ - + @@ -242,7 +242,7 @@ - +
diff --git a/src/app/system/entity-to-entity-mapping/entity-to-entity-mapping.component.ts b/src/app/system/entity-to-entity-mapping/entity-to-entity-mapping.component.ts index e937aa26f..ce73dca86 100644 --- a/src/app/system/entity-to-entity-mapping/entity-to-entity-mapping.component.ts +++ b/src/app/system/entity-to-entity-mapping/entity-to-entity-mapping.component.ts @@ -48,8 +48,8 @@ export class EntityToEntityMappingComponent implements OnInit { /** * stores the data for clicked mapType */ - firstEntityData: string[] = []; - secondEntityData: string[] = []; + firstEntityData: any = []; + secondEntityData: any = []; firstMappingEntity: string; secondMappingEntity: string; diff --git a/src/app/system/roles-and-permissions/view-role/view-role.component.html b/src/app/system/roles-and-permissions/view-role/view-role.component.html index d62a70c46..bc997997b 100644 --- a/src/app/system/roles-and-permissions/view-role/view-role.component.html +++ b/src/app/system/roles-and-permissions/view-role/view-role.component.html @@ -21,22 +21,42 @@
-
+
+ + + + + +
+ +
+ Name: +
+ +
+ {{ rolePermissionService.name }} +
+ +
+ Description: +
+ +
+ {{ rolePermissionService.description }} +
+ +
+ +
+ +
+ +
+ +
-
- Name: - {{ rolePermissionService.name }} -
- -
- Description: - {{ rolePermissionService.description }} -
- - -
@@ -66,6 +86,8 @@
+ +
@@ -73,8 +95,7 @@
- + {{ permissionName(permission.code) }}
diff --git a/src/app/system/roles-and-permissions/view-role/view-role.component.scss b/src/app/system/roles-and-permissions/view-role/view-role.component.scss index 38b0b749c..ee114753a 100644 --- a/src/app/system/roles-and-permissions/view-role/view-role.component.scss +++ b/src/app/system/roles-and-permissions/view-role/view-role.component.scss @@ -38,3 +38,13 @@ mat-list-item { .inactive:hover { transform: scale(1.1); } + +.content { + div { + line-height: 3rem; + + &.header { + font-weight: 500; + } + } +} diff --git a/src/app/system/system.module.ts b/src/app/system/system.module.ts index 1dcf56d3e..4ec7cdc23 100644 --- a/src/app/system/system.module.ts +++ b/src/app/system/system.module.ts @@ -5,6 +5,7 @@ import { NgModule } from '@angular/core'; import { SharedModule } from '../shared/shared.module'; import { SystemRoutingModule } from './system-routing.module'; import { PipesModule } from '../pipes/pipes.module'; +import { DirectivesModule } from '../directives/directives.module'; /** Component Imports */ import { CodesComponent } from './codes/codes.component'; @@ -61,7 +62,8 @@ import { ConfigureMakerCheckerTasksComponent } from './configure-maker-checker-t imports: [ SystemRoutingModule, SharedModule, - PipesModule + PipesModule, + DirectivesModule ], declarations: [ SystemComponent,