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 8dee82543..1b9233971 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 @@ -129,7 +129,7 @@ Type - + @@ -137,20 +137,30 @@ Actions - + - - - - - - - + + + + + + + + + + + + + @@ -193,11 +203,10 @@ Type - + - Closed Date {{element.timeline.closedOnDate | date}} diff --git a/src/app/deposits/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component.ts b/src/app/deposits/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component.ts index 1031fa98e..b0eb1ec54 100644 --- a/src/app/deposits/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component.ts +++ b/src/app/deposits/recurring-deposits/recurring-deposits-account-view/recurring-deposits-account-view.component.ts @@ -99,7 +99,7 @@ export class RecurringDepositsAccountViewComponent implements OnInit { } if (!this.isprematureAllowed) { - this.buttonConfig.addOption({ + this.buttonConfig.addButton({ name: 'Close', icon: 'fa fa-arrow-right' }); diff --git a/src/app/deposits/recurring-deposits/recurring-deposits-account-view/recurring-deposits-buttons.config.ts b/src/app/deposits/recurring-deposits/recurring-deposits-account-view/recurring-deposits-buttons.config.ts index 40b32caa3..71c7baa57 100644 --- a/src/app/deposits/recurring-deposits/recurring-deposits-account-view/recurring-deposits-buttons.config.ts +++ b/src/app/deposits/recurring-deposits/recurring-deposits-account-view/recurring-deposits-buttons.config.ts @@ -133,4 +133,8 @@ export class RecurringDepositsButtonsConfiguration { this.optionArray.push(option); } + addButton(option: { name: string, icon: string, taskPermissionName?: string }) { + this.buttonsArray.push(option); + } + } diff --git a/src/app/loans/add-loan-charge/add-loan-charge.component.html b/src/app/loans/add-loan-charge/add-loan-charge.component.html deleted file mode 100644 index 365db7f98..000000000 --- a/src/app/loans/add-loan-charge/add-loan-charge.component.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - Charge - - - {{ loanCharge.name + ' (' + loanCharge.currency.name + ')' }} - - - - Charge is required - - - - - Amount - - - Amount is required - - - - - Charge Calculation - - - - - Charge Time - - - - - Due On - - - - - Due Date is required - - - - - - - Cancel - Submit - - - - - - - - diff --git a/src/app/loans/add-loan-charge/add-loan-charge.component.scss b/src/app/loans/add-loan-charge/add-loan-charge.component.scss deleted file mode 100644 index c5d1982b3..000000000 --- a/src/app/loans/add-loan-charge/add-loan-charge.component.scss +++ /dev/null @@ -1,3 +0,0 @@ -.container{ - width: 37rem; -} 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 410b20926..6d999769b 100644 --- a/src/app/loans/common-resolvers/loan-action-button.resolver.ts +++ b/src/app/loans/common-resolvers/loan-action-button.resolver.ts @@ -58,6 +58,8 @@ export class LoanActionButtonResolver implements Resolve { return this.loansService.getLoanScreenReportsData(); } else if (loanActionButton === 'approve') { return this.loansService.getLoanApprovalTemplate(loanId); + } else if (loanActionButton === 'add-loan-charge') { + return this.loansService.getLoanChargeTemplateResource(loanId); } else { return undefined; } diff --git a/src/app/loans/common-resolvers/loan-charge-template.resolver.ts b/src/app/loans/common-resolvers/loan-charge-template.resolver.ts deleted file mode 100644 index 0af6438eb..000000000 --- a/src/app/loans/common-resolvers/loan-charge-template.resolver.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** 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'; - -/** - * Loan Charge Template data resolver. - */ -@Injectable() -export class LoanChargeTemplateResolver implements Resolve { - - /** - * @param {LoansService} LoansService loans service. - */ - constructor(private loansService: LoansService) {} - - /** - * Returns the Loan Charge Template. - * @returns {Observable} - */ - resolve(route: ActivatedRouteSnapshot): Observable { - const loanId = route.paramMap.get('loanId'); - return this.loansService.getLoanChargeTemplateResource(loanId); - } - -} diff --git a/src/app/loans/common-resolvers/loan-details-general.resolver.ts b/src/app/loans/common-resolvers/loan-details-general.resolver.ts deleted file mode 100644 index 592f84a20..000000000 --- a/src/app/loans/common-resolvers/loan-details-general.resolver.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** 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'; - -/** - * Clients data resolver. - */ -@Injectable() -export class LoanDetailsGeneralResolver implements Resolve { - - /** - * @param {LoansService} LoansService Loans service. - */ - constructor(private loansService: LoansService) { } - - /** - * Returns the Loans data. - * @returns {Observable} - */ - resolve(route: ActivatedRouteSnapshot): Observable { - const loanId = route.parent.paramMap.get('loanId'); - return this.loansService.getLoanAccountDetails(loanId); - } - -} diff --git a/src/app/loans/common-resolvers/loan-details.resolver.ts b/src/app/loans/common-resolvers/loan-details.resolver.ts index a404e2033..339e0c88c 100644 --- a/src/app/loans/common-resolvers/loan-details.resolver.ts +++ b/src/app/loans/common-resolvers/loan-details.resolver.ts @@ -24,7 +24,7 @@ export class LoanDetailsResolver implements Resolve { * @returns {Observable} */ resolve(route: ActivatedRouteSnapshot): Observable { - const loanId = route.paramMap.get('loanId'); + const loanId = route.paramMap.get('loanId') || route.parent.paramMap.get('loanId'); return this.loansService.getLoanAccountAssociationDetails(loanId); } diff --git a/src/app/loans/loans-routing.module.ts b/src/app/loans/loans-routing.module.ts index 1d2a3644d..b1bf29be5 100644 --- a/src/app/loans/loans-routing.module.ts +++ b/src/app/loans/loans-routing.module.ts @@ -6,7 +6,6 @@ import { Routes, RouterModule } from '@angular/router'; import { extract } from '../core/i18n/i18n.service'; /** Custom Components */ -import { AddLoanChargeComponent } from './add-loan-charge/add-loan-charge.component'; import { LoansViewComponent } from './loans-view/loans-view.component'; import { GeneralTabComponent } from './loans-view/general-tab/general-tab.component'; import { AccountDetailsComponent } from './loans-view/account-details/account-details.component'; @@ -27,9 +26,7 @@ import { StandingInstructionsTabComponent } from 'app/loans/loans-view/standing- import { EditLoansAccountComponent } from './edit-loans-account/edit-loans-account.component'; /** Custom Resolvers */ -import { LoanChargeTemplateResolver } from './common-resolvers/loan-charge-template.resolver'; import { LoanDetailsResolver } from './common-resolvers/loan-details.resolver'; -import { LoanDetailsGeneralResolver } from './common-resolvers/loan-details-general.resolver'; import { LoanNotesResolver } from './common-resolvers/loan-notes.resolver'; import { LoanDetailsChargesResolver } from './common-resolvers/loan-details-charges.resolver'; import { LoanDatatablesResolver } from './common-resolvers/loan-datatables.resolver'; @@ -69,18 +66,12 @@ const routes: Routes = [ { path: 'general', component: GeneralTabComponent, - data: { title: extract('General'), breadcrumb: 'General', routeParamBreadcrumb: false }, - resolve: { - loanDetailsData: LoanDetailsGeneralResolver - } + data: { title: extract('General'), breadcrumb: 'General', routeParamBreadcrumb: false } }, { path: 'accountdetail', component: AccountDetailsComponent, - data: { title: extract('Account Detail'), breadcrumb: 'Account Detail', routeParamBreadcrumb: false }, - resolve: { - loanDetailsData: LoanDetailsGeneralResolver - } + data: { title: extract('Account Detail'), breadcrumb: 'Account Detail', routeParamBreadcrumb: false } }, { path: 'original-schedule', @@ -125,10 +116,7 @@ const routes: Routes = [ { path: 'overdue-charges', component: OverdueChargesTabComponent, - data: { title: extract('Overdue Charges'), breadcrumb: 'Overdue Charges', routeParamBreadcrumb: false }, - resolve: { - loanDetailsData: LoanDetailsGeneralResolver - } + data: { title: extract('Overdue Charges'), breadcrumb: 'Overdue Charges', routeParamBreadcrumb: false } }, { path: 'floating-interest-rates', @@ -152,7 +140,7 @@ const routes: Routes = [ data: { title: extract('Loan Documents'), breadcrumb: 'Loan Documents', routeParamBreadcrumb: false }, resolve: { loanDocuments: LoanDocumentsResolver, - loanDetailsData: LoanDetailsGeneralResolver + loanDetailsData: LoanDetailsResolver }, }, { @@ -166,10 +154,7 @@ const routes: Routes = [ { path: 'standing-instruction', component: StandingInstructionsTabComponent, - data: { title: extract('Standing Instructions'), breadcrumb: 'Standing Instructions', routeParamBreadcrumb: false }, - resolve: { - loanDetailsData: LoanDetailsGeneralResolver - }, + data: { title: extract('Standing Instructions'), breadcrumb: 'Standing Instructions', routeParamBreadcrumb: false } }, { path: 'datatables', @@ -182,14 +167,6 @@ const routes: Routes = [ } }] }, - { - path: 'add-loan-charge', - component: AddLoanChargeComponent, - data: { title: extract('Add Loan Charge'), breadcrumb: 'Add Loan Charge', routeParamBreadcrumb: false }, - resolve: { - loanChargeTemplate: LoanChargeTemplateResolver - } - }, { path: 'actions/:action', component: LoanAccountActionsComponent, @@ -217,8 +194,6 @@ const routes: Routes = [ exports: [RouterModule], declarations: [], providers: [ - LoanChargeTemplateResolver, - LoanDetailsGeneralResolver, LoanDetailsResolver, LoanNotesResolver, LoanDetailsChargesResolver, diff --git a/src/app/loans/loans-view/account-details/account-details.component.ts b/src/app/loans/loans-view/account-details/account-details.component.ts index 3c3195646..26f6bcc35 100644 --- a/src/app/loans/loans-view/account-details/account-details.component.ts +++ b/src/app/loans/loans-view/account-details/account-details.component.ts @@ -15,7 +15,7 @@ export class AccountDetailsComponent implements OnInit { }[]; constructor(private route: ActivatedRoute) { - this.route.data.subscribe((data: { loanDetailsData: any, }) => { + this.route.parent.data.subscribe((data: { loanDetailsData: any, }) => { this.loanDetails = data.loanDetailsData; }); } diff --git a/src/app/loans/loans-view/button-config.ts b/src/app/loans/loans-view/button-config.ts deleted file mode 100644 index d0bcd8839..000000000 --- a/src/app/loans/loans-view/button-config.ts +++ /dev/null @@ -1,173 +0,0 @@ -export const ButtonConfig = { - 'Submitted and pending approval': { - singlebuttons: [ - { - name: 'Add Loan Charge', - icon: 'fa fa-plus', - taskPermissionName: 'CREATE_LOANCHARGE', - }, - { - name: 'Approve', - icon: 'fa fa-check', - taskPermissionName: 'APPROVE_LOAN', - }, - { - name: 'Modify Application', - icon: 'fa fa-pincel-square-o', - taskPermissionName: 'UPDATE_LOAN', - }, - { - name: 'Reject', - icon: 'fa fa-times', - taskPermissionName: 'REJECT_LOAN', - }, - ], - options: [ - { - name: 'Withdrawn by client', - taskPermissionName: 'WITHDRAW_LOAN', - }, - { - name: 'Delete', - taskPermissionName: 'DELETE_LOAN', - }, - { - name: 'Add Collateral', - taskPermissionName: 'CREATE_COLLATERAL', - }, - { - name: 'View Guarantors', - taskPermissionName: 'READ_GUARANTOR', - }, - { - name: 'Create Guarantor', - taskPermissionName: 'CREATE_GUARANTOR', - }, - { - name: 'Loan Screen Reports', - taskPermissionName: 'READ_LOAN', - }, - ], - }, - - Approved: { - singlebuttons: [ - { - name: 'Disburse', - icon: 'fa fa-flag', - taskPermissionName: 'DISBURSE_LOAN', - }, - { - name: 'Disburse to Savings', - icon: 'fa fa-flag', - taskPermissionName: 'DISBURSETOSAVINGS_LOAN', - }, - { - name: 'Undo Approval', - icon: 'fa fa-undo', - taskPermissionName: 'APPROVALUNDO_LOAN', - }, - ], - options: [ - { - name: 'Add Loan Charge', - taskPermissionName: 'CREATE_LOANCHARGE', - }, - { - name: 'View Guarantors', - taskPermissionName: 'READ_GUARANTOR', - }, - { - name: 'Create Guarantor', - taskPermissionName: 'CREATE_GUARANTOR', - }, - { - name: 'Loan Screen Report', - taskPermissionName: 'READ_LOAN', - }, - ], - }, - - Active: { - singlebuttons: [ - { - name: 'Add Loan Charge', - icon: 'fa fa-plus', - taskPermissionName: 'CREATE_LOANCHARGE', - }, - { - name: 'Foreclosure', - icon: 'icon-dollar', - taskPermissionName: 'FORECLOSURE_LOAN', - }, - { - name: 'Make Repayment', - icon: 'fa fa-dollar', - taskPermissionName: 'REPAYMENT_LOAN', - }, - { - name: 'Undo Disbursal', - icon: 'fa fa-undo', - taskPermissionName: 'DISBURSALUNDO_LOAN', - }, - ], - options: [ - { - name: 'Waive Interest', - taskPermissionName: 'WAIVEINTERESTPORTION_LOAN', - }, - { - name: 'Reschedule', - taskPermissionName: 'CREATE_RESCHEDULELOAN', - }, - { - name: 'Write Off', - taskPermissionName: 'WRITEOFF_LOAN', - }, - { - name: 'Close (as Rescheduled)', - taskPermissionName: 'CLOSEASRESCHEDULED_LOAN', - }, - { - name: 'Close', - taskPermissionName: 'CLOSE_LOAN', - }, - { - name: 'Loan Screen Report', - taskPermissionName: 'READ_LOAN', - }, - { - name: 'View Guarantors', - taskPermissionName: 'READ_GUARANTOR', - }, - { - name: 'Create Guarantor', - taskPermissionName: 'CREATE_GUARANTOR', - }, - { - name: 'Recover From Guarantor', - taskPermissionName: 'RECOVERGUARANTEES_LOAN', - }, - ], - }, - - Overpaid: { - singlebuttons: [ - { - name: 'Transfer Funds', - icon: 'fa fa-exchange', - taskPermissionName: 'CREATE_ACCOUNTTRANSFER', - }, - ], - }, - - ClosedWrittenOff: { - singlebuttons: [ - { - name: 'Recovery Payment', - icon: 'fa fa-briefcase', - taskPermissionName: 'RECOVERYPAYMENT_LOAN', - }, - ], - }, -}; diff --git a/src/app/loans/loans-view/general-tab/general-tab.component.ts b/src/app/loans/loans-view/general-tab/general-tab.component.ts index 6e95cd02e..e1e51702f 100644 --- a/src/app/loans/loans-view/general-tab/general-tab.component.ts +++ b/src/app/loans/loans-view/general-tab/general-tab.component.ts @@ -32,7 +32,7 @@ export class GeneralTabComponent implements OnInit { detailsDataSource: MatTableDataSource; constructor(private route: ActivatedRoute) { - this.route.data.subscribe((data: { loanDetailsData: any, }) => { + this.route.parent.data.subscribe((data: { loanDetailsData: any, }) => { this.loanDetails = data.loanDetailsData; }); } diff --git a/src/app/loans/loans-view/loan-account-actions/add-collateral/add-collateral.component.html b/src/app/loans/loans-view/loan-account-actions/add-collateral/add-collateral.component.html index 87e6d3a57..fc226102b 100644 --- a/src/app/loans/loans-view/loan-account-actions/add-collateral/add-collateral.component.html +++ b/src/app/loans/loans-view/loan-account-actions/add-collateral/add-collateral.component.html @@ -33,7 +33,7 @@ - Cancel + Cancel Submit diff --git a/src/app/loans/loans-view/loan-account-actions/add-collateral/add-collateral.component.ts b/src/app/loans/loans-view/loan-account-actions/add-collateral/add-collateral.component.ts index e328c28b6..8e43296b1 100644 --- a/src/app/loans/loans-view/loan-account-actions/add-collateral/add-collateral.component.ts +++ b/src/app/loans/loans-view/loan-account-actions/add-collateral/add-collateral.component.ts @@ -62,7 +62,7 @@ export class AddCollateralComponent implements OnInit { const collateralForm = this.collateralForm.value; collateralForm.locale = 'en'; this.loanService.createLoanCollateral(loanId, collateralForm).subscribe((response: any) => { - this.router.navigate(['../general'], { relativeTo: this.route }); + this.router.navigate(['../../general'], { relativeTo: this.route }); }); } 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 new file mode 100644 index 000000000..1e064b05f --- /dev/null +++ b/src/app/loans/loans-view/loan-account-actions/add-loan-charge/add-loan-charge.component.html @@ -0,0 +1,55 @@ + + + + + + + Charge + + + {{ loanCharge.name + ' (' + loanCharge?.currency.name + ')' }} + + + + Charge is required + + + + + Amount + + + Amount is required + + + + + Charge Calculation + + + + + Charge Time + + + + + Due On + + + + + Due Date is required + + + + + + + Cancel + Submit + + + + \ No newline at end of file diff --git a/src/app/loans/loans-view/loan-account-actions/add-loan-charge/add-loan-charge.component.scss b/src/app/loans/loans-view/loan-account-actions/add-loan-charge/add-loan-charge.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/src/app/loans/add-loan-charge/add-loan-charge.component.spec.ts b/src/app/loans/loans-view/loan-account-actions/add-loan-charge/add-loan-charge.component.spec.ts similarity index 100% rename from src/app/loans/add-loan-charge/add-loan-charge.component.spec.ts rename to src/app/loans/loans-view/loan-account-actions/add-loan-charge/add-loan-charge.component.spec.ts diff --git a/src/app/loans/add-loan-charge/add-loan-charge.component.ts b/src/app/loans/loans-view/loan-account-actions/add-loan-charge/add-loan-charge.component.ts similarity index 88% rename from src/app/loans/add-loan-charge/add-loan-charge.component.ts rename to src/app/loans/loans-view/loan-account-actions/add-loan-charge/add-loan-charge.component.ts index 4e55a5a1a..d4b3cf1fb 100644 --- a/src/app/loans/add-loan-charge/add-loan-charge.component.ts +++ b/src/app/loans/loans-view/loan-account-actions/add-loan-charge/add-loan-charge.component.ts @@ -5,13 +5,13 @@ import { Router, ActivatedRoute } from '@angular/router'; import { DatePipe } from '@angular/common'; /** Custom Services */ -import { LoansService } from '../loans.service'; +import { LoansService } from '../../../loans.service'; /** * Create Add Loan Charge component. */ @Component({ - selector: 'mifosx-addloancharge', + selector: 'mifosx-add-loan-charge', templateUrl: './add-loan-charge.component.html', styleUrls: ['./add-loan-charge.component.scss'] }) @@ -28,6 +28,9 @@ export class AddLoanChargeComponent implements OnInit { id: number; name: string; amount: number; + currency: { + name: string; + }; chargeCalculationType: { value: any; }; @@ -51,10 +54,10 @@ export class AddLoanChargeComponent implements OnInit { private router: Router, private datePipe: DatePipe, private loansService: LoansService) { - this.route.data.subscribe((data: { loanChargeTemplate: any }) => { - this.loanChargeOptions = data.loanChargeTemplate.chargeOptions; + this.route.data.subscribe((data: { actionButtonData: any }) => { + this.loanChargeOptions = data.actionButtonData.chargeOptions; }); - this.loanId = this.route.snapshot.params['loanId']; + this.loanId = this.route.parent.snapshot.params['loanId']; } /** @@ -102,7 +105,7 @@ export class AddLoanChargeComponent implements OnInit { loanCharge.locale = 'en'; loanCharge.dateFormat = dateFormat; this.loansService.createLoanCharge(this.loanId, 'charges', loanCharge).subscribe(res => { - this.router.navigate(['../'], { relativeTo: this.route }); + this.router.navigate(['../../'], { relativeTo: this.route }); }); } } diff --git a/src/app/loans/loans-view/loan-account-actions/assign-loan-officer/assign-loan-officer.component.html b/src/app/loans/loans-view/loan-account-actions/assign-loan-officer/assign-loan-officer.component.html index 668d60efd..001bb977c 100644 --- a/src/app/loans/loans-view/loan-account-actions/assign-loan-officer/assign-loan-officer.component.html +++ b/src/app/loans/loans-view/loan-account-actions/assign-loan-officer/assign-loan-officer.component.html @@ -31,7 +31,7 @@ - Cancel + Cancel Submit diff --git a/src/app/loans/loans-view/loan-account-actions/close-as-rescheduled/close-as-rescheduled.component.html b/src/app/loans/loans-view/loan-account-actions/close-as-rescheduled/close-as-rescheduled.component.html index 2a75397fa..869e73892 100644 --- a/src/app/loans/loans-view/loan-account-actions/close-as-rescheduled/close-as-rescheduled.component.html +++ b/src/app/loans/loans-view/loan-account-actions/close-as-rescheduled/close-as-rescheduled.component.html @@ -24,7 +24,7 @@ - Cancel + Cancel Submit diff --git a/src/app/loans/loans-view/loan-account-actions/close-as-rescheduled/close-as-rescheduled.component.ts b/src/app/loans/loans-view/loan-account-actions/close-as-rescheduled/close-as-rescheduled.component.ts index 98f2bb6f3..96cb993b0 100644 --- a/src/app/loans/loans-view/loan-account-actions/close-as-rescheduled/close-as-rescheduled.component.ts +++ b/src/app/loans/loans-view/loan-account-actions/close-as-rescheduled/close-as-rescheduled.component.ts @@ -68,7 +68,7 @@ export class CloseAsRescheduledComponent implements OnInit { closeForm.dateFormat = dateFormat; this.loanService.submitLoanActionButton(this.loanId, closeForm, 'close-rescheduled') .subscribe((response: any) => { - this.router.navigate(['../general'], { relativeTo: this.route }); + this.router.navigate(['../../general'], { relativeTo: this.route }); }); } } diff --git a/src/app/loans/loans-view/loan-account-actions/create-guarantor/create-guarantor.component.html b/src/app/loans/loans-view/loan-account-actions/create-guarantor/create-guarantor.component.html index 0add49ca3..657fbdaa9 100644 --- a/src/app/loans/loans-view/loan-account-actions/create-guarantor/create-guarantor.component.html +++ b/src/app/loans/loans-view/loan-account-actions/create-guarantor/create-guarantor.component.html @@ -5,32 +5,67 @@ - - Existing Client - + + Existing Client + - + Name - + Name is required + + + {{ client.displayName }} + + + + + Relationship + + + {{ relationType.name }} + + + + + 0"> + + + Account + + + {{ accountOption.productName }} - {{ accountOption.accountNo }} + + + + + + Amount + + + + + - - Relationship - - - {{ relationType.name }} - - - - + + + Relationship + + + {{ relationType.name }} + + + + First Name @@ -89,7 +124,7 @@ - Cancel + Cancel Submit @@ -97,4 +132,25 @@ - \ No newline at end of file + + + + + Client Details + + + Name + {{newGuarantorForm.controls.name.value.displayName}} + + + Id + {{newGuarantorForm.controls.name.value.id}} + + + Office + {{newGuarantorForm.controls.name.value.officeName}} + + + + + diff --git a/src/app/loans/loans-view/loan-account-actions/create-guarantor/create-guarantor.component.scss b/src/app/loans/loans-view/loan-account-actions/create-guarantor/create-guarantor.component.scss index e69de29bb..efe1f45f4 100644 --- a/src/app/loans/loans-view/loan-account-actions/create-guarantor/create-guarantor.component.scss +++ b/src/app/loans/loans-view/loan-account-actions/create-guarantor/create-guarantor.component.scss @@ -0,0 +1,31 @@ +.container { + + .mat-table { + display: block; + font-family: Tahoma, Verdana; + width: 100%; + } + + .mat-row, + .mat-header-row { + display: flex; + border-bottom-width: 1px; + border-bottom-style: solid; + align-items: center; + min-height: 48px; + padding: 0 24px; + } + + .mat-cell, + .mat-header-cell { + flex: 1; + overflow: hidden; + word-wrap: break-word; + } + + h3 { + padding-left: 0; + margin-bottom: 0; + } + +} diff --git a/src/app/loans/loans-view/loan-account-actions/create-guarantor/create-guarantor.component.ts b/src/app/loans/loans-view/loan-account-actions/create-guarantor/create-guarantor.component.ts index feacd649b..d57768c09 100644 --- a/src/app/loans/loans-view/loan-account-actions/create-guarantor/create-guarantor.component.ts +++ b/src/app/loans/loans-view/loan-account-actions/create-guarantor/create-guarantor.component.ts @@ -1,11 +1,12 @@ /** Angular Imports */ -import { Component, OnInit, Input } from '@angular/core'; +import { Component, OnInit, Input, AfterViewInit } from '@angular/core'; import { FormGroup, FormBuilder, Validators, FormControl } from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; /** Custom Services */ import { LoansService } from 'app/loans/loans.service'; import { DatePipe } from '@angular/common'; +import { ClientsService } from 'app/clients/clients.service'; /** * Create Guarantor Action @@ -15,7 +16,7 @@ import { DatePipe } from '@angular/common'; templateUrl: './create-guarantor.component.html', styleUrls: ['./create-guarantor.component.scss'] }) -export class CreateGuarantorComponent implements OnInit { +export class CreateGuarantorComponent implements OnInit, AfterViewInit { @Input() dataObject: any; /** New Guarantor Form */ @@ -30,6 +31,10 @@ export class CreateGuarantorComponent implements OnInit { minDate = new Date(2000, 0, 1); /** Maximum date allowed. */ maxDate = new Date(); + /** Client data. */ + clientsData: any = []; + /** Account Options */ + accountOptions: any = []; /** * @param {FormBuilder} formBuilder Form Builder. @@ -42,7 +47,8 @@ export class CreateGuarantorComponent implements OnInit { private loanService: LoansService, private route: ActivatedRoute, private router: Router, - private datePipe: DatePipe) { + private datePipe: DatePipe, + private clientsService: ClientsService) { this.loanId = this.route.parent.snapshot.params['loanId']; } @@ -57,7 +63,9 @@ export class CreateGuarantorComponent implements OnInit { this.newGuarantorForm = this.formBuilder.group({ 'existingClient': [''], 'name': ['', Validators.required], - 'clientRelationshipTypeId': [''] + 'clientRelationshipTypeId': [''], + 'savingsId': [''], + 'amount': [''] }); } @@ -86,8 +94,12 @@ export class CreateGuarantorComponent implements OnInit { this.newGuarantorForm.addControl('mobileNumber', new FormControl('')); this.newGuarantorForm.addControl('housePhoneNumber', new FormControl('')); this.newGuarantorForm.removeControl('name'); + this.newGuarantorForm.removeControl('savingsId'); + this.newGuarantorForm.removeControl('amount'); } else { this.newGuarantorForm.addControl('name', new FormControl('')); + this.newGuarantorForm.addControl('savingsId', new FormControl('')); + this.newGuarantorForm.addControl('amount', new FormControl('')); this.newGuarantorForm.removeControl('firstname'); this.newGuarantorForm.removeControl('lastname'); this.newGuarantorForm.removeControl('dob'); @@ -101,6 +113,39 @@ export class CreateGuarantorComponent implements OnInit { }); } + /** + * Subscribes to Clients search filter: + */ + ngAfterViewInit() { + if (this.newGuarantorForm.value.existingClient) { + this.newGuarantorForm.get('name').valueChanges.subscribe((value: string) => { + if (value.length >= 2) { + this.clientsService.getFilteredClients('displayName', 'ASC', true, value) + .subscribe((data: any) => { + this.clientsData = data.pageItems; + }); + } + }); + } + } + + clientSelected(clientDetails: any){ + console.log(clientDetails); + this.accountOptions = []; + this.loanService.guarantorAccountResource(this.loanId, clientDetails.id).subscribe((response: any) => { + this.accountOptions = response.accountLinkingOptions; + }) + } + + /** + * Displays Client name in form control input. + * @param {any} client Client data. + * @returns {string} Client name if valid otherwise undefined. + */ + displayClient(client: any): string | undefined { + return client ? client.displayName : undefined; + } + /** Submits the new guarantor details form */ submit() { const prevdob: Date = this.newGuarantorForm.value.dob; @@ -108,17 +153,25 @@ export class CreateGuarantorComponent implements OnInit { // TODO: Update once language and date settings are setup const dateFormat = 'dd-MM-yyyy'; const locale = 'en'; - const newGuarantorData = { + let newGuarantorData = { ... this.newGuarantorForm.value, - dob: this.datePipe.transform(prevdob, dateFormat), locale, - dateFormat, guarantorTypeId }; + + if(this.newGuarantorForm.value.existingClient) { + newGuarantorData['entityId'] = this.newGuarantorForm.controls.name.value.id; + } else { + newGuarantorData['dob'] = this.datePipe.transform(prevdob, dateFormat), + newGuarantorData['dateFormat'] = dateFormat + } + delete newGuarantorData.existingClient; + delete newGuarantorData.name; + this.loanService.createNewGuarantor(this.loanId, newGuarantorData) .subscribe((response: any) => { - this.router.navigate(['../general'], { relativeTo: this.route }); + this.router.navigate(['../../general'], { relativeTo: this.route }); }); } 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 index cb2498298..ffe3c5534 100644 --- 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 @@ -40,7 +40,7 @@ - Cancel + Cancel Submit 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 index 1e5aaa5a0..e52d94bd3 100644 --- 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 @@ -72,7 +72,7 @@ export class DisburseLoanAccountComponent implements OnInit { disbursementForm.locale = 'en'; disbursementForm.dateFormat = dateFormat; this.loanService.loanActionButtons(loanId, 'disbursetosavings', disbursementForm).subscribe((response: any) => { - this.router.navigate(['../general'], {relativeTo: this.route}); + this.router.navigate(['../../general'], {relativeTo: this.route}); }); } diff --git a/src/app/loans/loans-view/loan-account-actions/disburse/disburse.component.html b/src/app/loans/loans-view/loan-account-actions/disburse/disburse.component.html index fae3fa03b..7cc85268c 100644 --- a/src/app/loans/loans-view/loan-account-actions/disburse/disburse.component.html +++ b/src/app/loans/loans-view/loan-account-actions/disburse/disburse.component.html @@ -80,7 +80,7 @@ - Cancel + Cancel Submit diff --git a/src/app/loans/loans-view/loan-account-actions/disburse/disburse.component.ts b/src/app/loans/loans-view/loan-account-actions/disburse/disburse.component.ts index ceeb3a3db..11474a8c6 100644 --- a/src/app/loans/loans-view/loan-account-actions/disburse/disburse.component.ts +++ b/src/app/loans/loans-view/loan-account-actions/disburse/disburse.component.ts @@ -109,7 +109,7 @@ export class DisburseComponent implements OnInit { disbursementLoanData.dateFormat = dateFormat; this.loanService.loanActionButtons(this.loanId, 'disburse', disbursementLoanData ) .subscribe((response: any) => { - this.router.navigate(['../general'], { relativeTo: this.route }); + this.router.navigate(['../../general'], { relativeTo: this.route }); }); } diff --git a/src/app/loans/loans-view/loan-account-actions/foreclosure/foreclosure.component.html b/src/app/loans/loans-view/loan-account-actions/foreclosure/foreclosure.component.html index 525b80205..5a9d6842b 100644 --- a/src/app/loans/loans-view/loan-account-actions/foreclosure/foreclosure.component.html +++ b/src/app/loans/loans-view/loan-account-actions/foreclosure/foreclosure.component.html @@ -49,7 +49,7 @@ - Cancel + Cancel Foreclosure diff --git a/src/app/loans/loans-view/loan-account-actions/foreclosure/foreclosure.component.ts b/src/app/loans/loans-view/loan-account-actions/foreclosure/foreclosure.component.ts index d8b83e2ec..f8f40e6eb 100644 --- a/src/app/loans/loans-view/loan-account-actions/foreclosure/foreclosure.component.ts +++ b/src/app/loans/loans-view/loan-account-actions/foreclosure/foreclosure.component.ts @@ -117,7 +117,7 @@ export class ForeclosureComponent implements OnInit { this.loanService.loanForclosureData(this.loanId, formData) .subscribe((response: any) => { - this.router.navigate([`../general`], { relativeTo: this.route }); + this.router.navigate([`../../general`], { relativeTo: this.route }); }); } 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 627543ab6..b189adefb 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 @@ -33,7 +33,8 @@ export class LoanAccountActionsComponent { withdrawn_by_client: boolean, undo_disbursal: boolean, loan_screen_reports: boolean, - approve: boolean } = { + approve: boolean, + add_loan_charge: boolean } = { close: false, undo_approval: false, write_off: false, @@ -54,7 +55,8 @@ export class LoanAccountActionsComponent { withdrawn_by_client: false, undo_disbursal: false, loan_screen_reports: false, - approve: false }; + approve: false, + add_loan_charge: false }; actionButtonData: any; actionName: any; @@ -74,6 +76,9 @@ export class LoanAccountActionsComponent { if (this.actionName === 'change-loan-officer') { this.actionName = 'assign-loan-officer'; } + for (const key of Object.keys(this.actions)) { + this.actions[key] = false; + } this.actions[this.actionName.replace(/-/g, '_')] = true; }); } diff --git a/src/app/loans/loans-view/loan-account-actions/loan-reschedule/loan-reschedule.component.html b/src/app/loans/loans-view/loan-account-actions/loan-reschedule/loan-reschedule.component.html index 711f62abf..140bbd6e4 100644 --- a/src/app/loans/loans-view/loan-account-actions/loan-reschedule/loan-reschedule.component.html +++ b/src/app/loans/loans-view/loan-account-actions/loan-reschedule/loan-reschedule.component.html @@ -88,7 +88,7 @@ - Cancel + Cancel Submit diff --git a/src/app/loans/loans-view/loan-account-actions/loan-reschedule/loan-reschedule.component.ts b/src/app/loans/loans-view/loan-account-actions/loan-reschedule/loan-reschedule.component.ts index f767b67cb..43508ceac 100644 --- a/src/app/loans/loans-view/loan-account-actions/loan-reschedule/loan-reschedule.component.ts +++ b/src/app/loans/loans-view/loan-account-actions/loan-reschedule/loan-reschedule.component.ts @@ -81,7 +81,7 @@ export class LoanRescheduleComponent implements OnInit { // TODO: needs to be updated // mentioned in Community App: // location.path('/loans/' + scope.loanId + '/viewreschedulerequest/'+ data.resourceId); - this.router.navigate(['../general'], { relativeTo: this.route }); + this.router.navigate(['../../general'], { relativeTo: this.route }); }); } 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 index 9179a6973..17391b8ce 100644 --- 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 @@ -52,7 +52,6 @@ export class LoanScreenReportsComponent implements OnInit { ngOnInit() { this.templatesData = this.dataObject; this.createLoanScreenReportForm(); - console.log('templateData: ', this.templatesData); } /** diff --git a/src/app/loans/loans-view/loan-account-actions/loans-account-close/loans-account-close.component.html b/src/app/loans/loans-view/loan-account-actions/loans-account-close/loans-account-close.component.html index 087831899..67595ca60 100644 --- a/src/app/loans/loans-view/loan-account-actions/loans-account-close/loans-account-close.component.html +++ b/src/app/loans/loans-view/loan-account-actions/loans-account-close/loans-account-close.component.html @@ -24,7 +24,7 @@ - Cancel + Cancel Submit diff --git a/src/app/loans/loans-view/loan-account-actions/loans-account-close/loans-account-close.component.ts b/src/app/loans/loans-view/loan-account-actions/loans-account-close/loans-account-close.component.ts index 8c8a3faa8..d0c7974b4 100644 --- a/src/app/loans/loans-view/loan-account-actions/loans-account-close/loans-account-close.component.ts +++ b/src/app/loans/loans-view/loan-account-actions/loans-account-close/loans-account-close.component.ts @@ -69,7 +69,7 @@ export class LoansAccountCloseComponent implements OnInit { closeForm.dateFormat = dateFormat; this.loanService.submitLoanActionButton(this.loanId, closeForm, 'close') .subscribe((response: any) => { - this.router.navigate(['../general'], { relativeTo: this.route }); + this.router.navigate(['../../general'], { relativeTo: this.route }); }); } diff --git a/src/app/loans/loans-view/loan-account-actions/make-repayment/make-repayment.component.html b/src/app/loans/loans-view/loan-account-actions/make-repayment/make-repayment.component.html index 8c8d971da..65a6ff2bb 100644 --- a/src/app/loans/loans-view/loan-account-actions/make-repayment/make-repayment.component.html +++ b/src/app/loans/loans-view/loan-account-actions/make-repayment/make-repayment.component.html @@ -80,7 +80,7 @@ - Cancel + Cancel Submit diff --git a/src/app/loans/loans-view/loan-account-actions/make-repayment/make-repayment.component.ts b/src/app/loans/loans-view/loan-account-actions/make-repayment/make-repayment.component.ts index 885b78738..17a94da37 100644 --- a/src/app/loans/loans-view/loan-account-actions/make-repayment/make-repayment.component.ts +++ b/src/app/loans/loans-view/loan-account-actions/make-repayment/make-repayment.component.ts @@ -108,7 +108,7 @@ export class MakeRepaymentComponent implements OnInit { repaymentLoanData.dateFormat = dateFormat; this.loanService.submitLoanActionButton(this.loanId, repaymentLoanData, 'repayment') .subscribe((response: any) => { - this.router.navigate(['../general'], { relativeTo: this.route }); + this.router.navigate(['../../../general'], { relativeTo: this.route }); }); } diff --git a/src/app/loans/loans-view/loan-account-actions/prepay-loan/prepay-loan.component.html b/src/app/loans/loans-view/loan-account-actions/prepay-loan/prepay-loan.component.html index 509b3d89b..354210f97 100644 --- a/src/app/loans/loans-view/loan-account-actions/prepay-loan/prepay-loan.component.html +++ b/src/app/loans/loans-view/loan-account-actions/prepay-loan/prepay-loan.component.html @@ -93,7 +93,7 @@ - Cancel + Cancel Submit diff --git a/src/app/loans/loans-view/loan-account-actions/prepay-loan/prepay-loan.component.ts b/src/app/loans/loans-view/loan-account-actions/prepay-loan/prepay-loan.component.ts index 6ccf2394c..8190a7103 100644 --- a/src/app/loans/loans-view/loan-account-actions/prepay-loan/prepay-loan.component.ts +++ b/src/app/loans/loans-view/loan-account-actions/prepay-loan/prepay-loan.component.ts @@ -120,7 +120,7 @@ export class PrepayLoanComponent implements OnInit { prepayLoanData.dateFormat = dateFormat; this.loanService.submitLoanActionButton(this.loanId, prepayLoanData, 'repayment') .subscribe((response: any) => { - this.router.navigate(['../general'], { relativeTo: this.route }); + this.router.navigate(['../../general'], { relativeTo: this.route }); }); } diff --git a/src/app/loans/loans-view/loan-account-actions/recovery-repayment/recovery-repayment.component.html b/src/app/loans/loans-view/loan-account-actions/recovery-repayment/recovery-repayment.component.html index 632c2de22..a7c488d7a 100644 --- a/src/app/loans/loans-view/loan-account-actions/recovery-repayment/recovery-repayment.component.html +++ b/src/app/loans/loans-view/loan-account-actions/recovery-repayment/recovery-repayment.component.html @@ -81,7 +81,7 @@ - Cancel + Cancel Submit diff --git a/src/app/loans/loans-view/loan-account-actions/recovery-repayment/recovery-repayment.component.ts b/src/app/loans/loans-view/loan-account-actions/recovery-repayment/recovery-repayment.component.ts index 54d1cb42b..f8255a345 100644 --- a/src/app/loans/loans-view/loan-account-actions/recovery-repayment/recovery-repayment.component.ts +++ b/src/app/loans/loans-view/loan-account-actions/recovery-repayment/recovery-repayment.component.ts @@ -109,7 +109,7 @@ export class RecoveryRepaymentComponent implements OnInit { recoveryRepaymentLoanData.dateFormat = dateFormat; this.loanService.submitLoanActionButton(this.loanId, recoveryRepaymentLoanData, 'recoverypayment') .subscribe((response: any) => { - this.router.navigate(['../general'], { relativeTo: this.route }); + this.router.navigate(['../../general'], { relativeTo: this.route }); }); } diff --git a/src/app/loans/loans-view/loan-account-actions/reject-loan/reject-loan.component.html b/src/app/loans/loans-view/loan-account-actions/reject-loan/reject-loan.component.html index b80fb0b54..da666d03f 100644 --- a/src/app/loans/loans-view/loan-account-actions/reject-loan/reject-loan.component.html +++ b/src/app/loans/loans-view/loan-account-actions/reject-loan/reject-loan.component.html @@ -24,7 +24,7 @@ - Cancel + Cancel Submit diff --git a/src/app/loans/loans-view/loan-account-actions/reject-loan/reject-loan.component.ts b/src/app/loans/loans-view/loan-account-actions/reject-loan/reject-loan.component.ts index f86edd1d5..9c3f45f33 100644 --- a/src/app/loans/loans-view/loan-account-actions/reject-loan/reject-loan.component.ts +++ b/src/app/loans/loans-view/loan-account-actions/reject-loan/reject-loan.component.ts @@ -68,7 +68,7 @@ export class RejectLoanComponent implements OnInit { rejectForm.locale = 'en'; rejectForm.dateFormat = dateFormat; this.loanService.loanActionButtons(this.loanId, 'reject', rejectForm).subscribe((response: any) => { - this.router.navigate(['../general'], { relativeTo: this.route }); + this.router.navigate(['../../general'], { relativeTo: this.route }); }); } diff --git a/src/app/loans/loans-view/loan-account-actions/undo-approval/undo-approval.component.html b/src/app/loans/loans-view/loan-account-actions/undo-approval/undo-approval.component.html index 98586f8eb..82a963ebc 100644 --- a/src/app/loans/loans-view/loan-account-actions/undo-approval/undo-approval.component.html +++ b/src/app/loans/loans-view/loan-account-actions/undo-approval/undo-approval.component.html @@ -8,7 +8,7 @@ - Cancel + Cancel Submit diff --git a/src/app/loans/loans-view/loan-account-actions/undo-approval/undo-approval.component.ts b/src/app/loans/loans-view/loan-account-actions/undo-approval/undo-approval.component.ts index 63c4d0f6c..b38a355c1 100644 --- a/src/app/loans/loans-view/loan-account-actions/undo-approval/undo-approval.component.ts +++ b/src/app/loans/loans-view/loan-account-actions/undo-approval/undo-approval.component.ts @@ -38,7 +38,7 @@ export class UndoApprovalComponent implements OnInit { submit() { const loanId = this.route.parent.snapshot.params['loanId']; this.loanService.loanActionButtons(loanId, 'undoapproval', { 'note': this.note.value }).subscribe((response: any) => { - this.router.navigate(['../general'], {relativeTo: this.route}); + this.router.navigate(['../../general'], {relativeTo: this.route}); }); } diff --git a/src/app/loans/loans-view/loan-account-actions/undo-disbursal/undo-disbursal.component.html b/src/app/loans/loans-view/loan-account-actions/undo-disbursal/undo-disbursal.component.html index 7a66639d4..fe9ce104e 100644 --- a/src/app/loans/loans-view/loan-account-actions/undo-disbursal/undo-disbursal.component.html +++ b/src/app/loans/loans-view/loan-account-actions/undo-disbursal/undo-disbursal.component.html @@ -8,7 +8,7 @@ - Cancel + Cancel Submit diff --git a/src/app/loans/loans-view/loan-account-actions/undo-disbursal/undo-disbursal.component.ts b/src/app/loans/loans-view/loan-account-actions/undo-disbursal/undo-disbursal.component.ts index ee67a8597..8a179d3cf 100644 --- a/src/app/loans/loans-view/loan-account-actions/undo-disbursal/undo-disbursal.component.ts +++ b/src/app/loans/loans-view/loan-account-actions/undo-disbursal/undo-disbursal.component.ts @@ -45,8 +45,8 @@ export class UndoDisbursalComponent implements OnInit { * Submits the undo disbursal form. */ submit() { - this.loansService.loanActionButtons(this.loanId, 'undoDisbursal', {'note': this.note.value}).subscribe((response: any) => { - this.router.navigate(['../general'], { relativeTo: this.route }); + this.loansService.loanActionButtons(this.loanId, 'undodisbursal', {'note': this.note.value}).subscribe((response: any) => { + this.router.navigate(['../../general'], { relativeTo: this.route }); }); } diff --git a/src/app/loans/loans-view/loan-account-actions/waive-interest/waive-interest.component.html b/src/app/loans/loans-view/loan-account-actions/waive-interest/waive-interest.component.html index de973ee2b..0ef68e338 100644 --- a/src/app/loans/loans-view/loan-account-actions/waive-interest/waive-interest.component.html +++ b/src/app/loans/loans-view/loan-account-actions/waive-interest/waive-interest.component.html @@ -32,7 +32,7 @@ - Cancel + Cancel Submit diff --git a/src/app/loans/loans-view/loan-account-actions/waive-interest/waive-interest.component.ts b/src/app/loans/loans-view/loan-account-actions/waive-interest/waive-interest.component.ts index b4cb5113c..837f4c184 100644 --- a/src/app/loans/loans-view/loan-account-actions/waive-interest/waive-interest.component.ts +++ b/src/app/loans/loans-view/loan-account-actions/waive-interest/waive-interest.component.ts @@ -71,7 +71,7 @@ export class WaiveInterestComponent implements OnInit { loanInterestForm.locale = 'en'; loanInterestForm.dateFormat = dateFormat; this.loanService.submitLoanActionButton(loanId, loanInterestForm, 'waiveinterest').subscribe((response: any) => { - this.router.navigate(['../general'], {relativeTo: this.route}); + this.router.navigate(['../../general'], {relativeTo: this.route}); }); } diff --git a/src/app/loans/loans-view/loan-account-actions/withdrawn-by-client/withdrawn-by-client.component.html b/src/app/loans/loans-view/loan-account-actions/withdrawn-by-client/withdrawn-by-client.component.html index f7cf1e210..d63bfbdac 100644 --- a/src/app/loans/loans-view/loan-account-actions/withdrawn-by-client/withdrawn-by-client.component.html +++ b/src/app/loans/loans-view/loan-account-actions/withdrawn-by-client/withdrawn-by-client.component.html @@ -24,7 +24,7 @@ - Cancel + Cancel Submit diff --git a/src/app/loans/loans-view/loan-account-actions/withdrawn-by-client/withdrawn-by-client.component.ts b/src/app/loans/loans-view/loan-account-actions/withdrawn-by-client/withdrawn-by-client.component.ts index 6808a1a02..025bcc307 100644 --- a/src/app/loans/loans-view/loan-account-actions/withdrawn-by-client/withdrawn-by-client.component.ts +++ b/src/app/loans/loans-view/loan-account-actions/withdrawn-by-client/withdrawn-by-client.component.ts @@ -73,7 +73,7 @@ export class WithdrawnByClientComponent implements OnInit { WithdrawnByClientLoanData.dateFormat = dateFormat; this.loanService.loanActionButtons(this.loanId, 'withdrawnByApplicant', WithdrawnByClientLoanData) .subscribe((response: any) => { - this.router.navigate(['../general'], { relativeTo: this.route }); + this.router.navigate(['../../../general'], { relativeTo: this.route }); }); } diff --git a/src/app/loans/loans-view/loan-account-actions/write-off-page/write-off-page.component.html b/src/app/loans/loans-view/loan-account-actions/write-off-page/write-off-page.component.html index 0cdb7102e..da20e2163 100644 --- a/src/app/loans/loans-view/loan-account-actions/write-off-page/write-off-page.component.html +++ b/src/app/loans/loans-view/loan-account-actions/write-off-page/write-off-page.component.html @@ -31,7 +31,7 @@ - Cancel + Cancel Submit diff --git a/src/app/loans/loans-view/loan-account-actions/write-off-page/write-off-page.component.ts b/src/app/loans/loans-view/loan-account-actions/write-off-page/write-off-page.component.ts index 30a913629..73d538b9f 100644 --- a/src/app/loans/loans-view/loan-account-actions/write-off-page/write-off-page.component.ts +++ b/src/app/loans/loans-view/loan-account-actions/write-off-page/write-off-page.component.ts @@ -70,7 +70,7 @@ export class WriteOffPageComponent implements OnInit { writeOffForm.locale = 'en'; writeOffForm.dateFormat = dateFormat; this.loanService.submitLoanActionButton(loanId, writeOffForm, 'writeoff').subscribe((response: any) => { - this.router.navigate(['../general'], {relativeTo: this.route}); + this.router.navigate(['../../../general'], {relativeTo: this.route}); }); } diff --git a/src/app/loans/loans-view/loan-accounts-button-config.ts b/src/app/loans/loans-view/loan-accounts-button-config.ts new file mode 100644 index 000000000..2c8e49fe0 --- /dev/null +++ b/src/app/loans/loans-view/loan-accounts-button-config.ts @@ -0,0 +1,223 @@ +/** Recurring Deposits Account Buttons Configuration */ +export class LoansAccountButtonConfiguration { + + 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: 'Add Loan Charge', + icon: 'fa fa-plus', + taskPermissionName: 'CREATE_LOANCHARGE', + }, + { + name: 'Foreclosure', + icon: 'icon-dollar', + taskPermissionName: 'FORECLOSURE_LOAN', + }, + { + name: 'Make Repayment', + icon: 'fa fa-dollar', + taskPermissionName: 'REPAYMENT_LOAN', + }, + { + name: 'Undo Disbursal', + icon: 'fa fa-undo', + taskPermissionName: 'DISBURSALUNDO_LOAN', + }, + ]; + break; + case 'Submitted and pending approval': + this.buttonsArray = [ + { + name: 'Add Loan Charge', + icon: 'fa fa-plus', + taskPermissionName: 'CREATE_LOANCHARGE', + }, + { + name: 'Approve', + icon: 'fa fa-check', + taskPermissionName: 'APPROVE_LOAN', + }, + { + name: 'Modify Application', + icon: 'fa fa-pincel-square-o', + taskPermissionName: 'UPDATE_LOAN', + }, + { + name: 'Reject', + icon: 'fa fa-times', + taskPermissionName: 'REJECT_LOAN', + }, + ]; + break; + case 'Approved': + this.buttonsArray = [ + { + name: 'Disburse', + icon: 'fa fa-flag', + taskPermissionName: 'DISBURSE_LOAN', + }, + { + name: 'Disburse to Savings', + icon: 'fa fa-flag', + taskPermissionName: 'DISBURSETOSAVINGS_LOAN', + }, + { + name: 'Undo Approval', + icon: 'fa fa-undo', + taskPermissionName: 'APPROVALUNDO_LOAN', + }, + ]; + break; + case 'Overpaid': + this.buttonsArray = [ + { + name: 'Transfer Funds', + icon: 'fa fa-exchange', + taskPermissionName: 'CREATE_ACCOUNTTRANSFER', + }, + ]; + break; + case 'Closed (written off)': + this.buttonsArray = [ + { + name: 'Recovery Payment', + icon: 'fa fa-briefcase', + taskPermissionName: 'RECOVERYPAYMENT_LOAN', + }, + ]; + break; + default: + this.buttonsArray = []; + } + } + + setOptions(status: string) { + switch (status) { + case 'Active': + this.optionArray = [ + { + name: 'Waive Interest', + taskPermissionName: 'WAIVEINTERESTPORTION_LOAN', + }, + { + name: 'Reschedule', + taskPermissionName: 'CREATE_RESCHEDULELOAN', + }, + { + name: 'Write Off', + taskPermissionName: 'WRITEOFF_LOAN', + }, + { + name: 'Close (as Rescheduled)', + taskPermissionName: 'CLOSEASRESCHEDULED_LOAN', + }, + { + name: 'Close', + taskPermissionName: 'CLOSE_LOAN', + }, + { + name: 'Loan Screen Report', + taskPermissionName: 'READ_LOAN', + }, + { + name: 'View Guarantors', + taskPermissionName: 'READ_GUARANTOR', + }, + { + name: 'Create Guarantor', + taskPermissionName: 'CREATE_GUARANTOR', + }, + { + name: 'Recover From Guarantor', + taskPermissionName: 'RECOVERGUARANTEES_LOAN', + }, + ]; + break; + case 'Submitted and pending approval': + this.optionArray = [ + { + name: 'Withdrawn by client', + taskPermissionName: 'WITHDRAW_LOAN', + }, + { + name: 'Delete', + taskPermissionName: 'DELETE_LOAN', + }, + { + name: 'Add Collateral', + taskPermissionName: 'CREATE_COLLATERAL', + }, + { + name: 'View Guarantors', + taskPermissionName: 'READ_GUARANTOR', + }, + { + name: 'Create Guarantor', + taskPermissionName: 'CREATE_GUARANTOR', + }, + { + name: 'Loan Screen Reports', + taskPermissionName: 'READ_LOAN', + }, + ]; + break; + case 'Approved': + this.optionArray = [ + { + name: 'Add Loan Charge', + taskPermissionName: 'CREATE_LOANCHARGE', + }, + { + name: 'View Guarantors', + taskPermissionName: 'READ_GUARANTOR', + }, + { + name: 'Create Guarantor', + taskPermissionName: 'CREATE_GUARANTOR', + }, + { + name: 'Loan Screen Report', + taskPermissionName: 'READ_LOAN', + }, + ]; + break; + default: + this.optionArray = []; + } + } + + addOption(option: { name: string, icon?: string, taskPermissionName?: string }) { + this.optionArray.push(option); + } + + addButton(option: { name: string, icon: string, taskPermissionName?: string }) { + this.buttonsArray.push(option); + } + +} diff --git a/src/app/loans/loans-view/loans-view.component.html b/src/app/loans/loans-view/loans-view.component.html index 4897eae77..19f43f9f1 100644 --- a/src/app/loans/loans-view/loans-view.component.html +++ b/src/app/loans/loans-view/loans-view.component.html @@ -3,6 +3,14 @@ + + + + + + + @@ -32,15 +40,15 @@ - + {{item.name}} - + More - + {{item.name}} diff --git a/src/app/loans/loans-view/loans-view.component.scss b/src/app/loans/loans-view/loans-view.component.scss index 4a99956cf..7fee1927b 100644 --- a/src/app/loans/loans-view/loans-view.component.scss +++ b/src/app/loans/loans-view/loans-view.component.scss @@ -14,6 +14,13 @@ } } } + .profile-image-container { + margin: 1%; + .profile-image { + object-fit: cover; + border-radius: 20px; + } + } .loan-actions { align-self: flex-end; margin: 0 1%; diff --git a/src/app/loans/loans-view/loans-view.component.ts b/src/app/loans/loans-view/loans-view.component.ts index ae30c6cb2..a8d0117df 100644 --- a/src/app/loans/loans-view/loans-view.component.ts +++ b/src/app/loans/loans-view/loans-view.component.ts @@ -7,10 +7,10 @@ import { MatDialog } from '@angular/material'; import { LoansService } from '../loans.service'; /** Custom Buttons Configuration */ -import { ButtonConfig } from './button-config'; +import { LoansAccountButtonConfiguration } from './loan-accounts-button-config'; /** Dialog Components */ -import { LoansConfirmationDialogBoxComponent } from '../custom-dialog/loans-confirmation-dialog-box/loans-confirmation-dialog-box.component'; +import { ConfirmationDialogComponent } from '../../shared/confirmation-dialog/confirmation-dialog.component'; import { DeleteDialogComponent } from 'app/shared/delete-dialog/delete-dialog.component'; @Component({ @@ -20,23 +20,20 @@ import { DeleteDialogComponent } from 'app/shared/delete-dialog/delete-dialog.co }) export class LoansViewComponent implements OnInit { + /** Loan Details Data */ loanDetailsData: any; + /** Loan Datatables */ loanDatatables: any; + /** Recalculate Interest */ recalculateInterest: any; + /** Status */ status: string; - buttons: { - singlebuttons: { - name: string, - icon: string, - taskPermissionName: string, - }[], - options?: { - name: string, - taskPermissionName: string - }[] - }; + /** Loan Id */ loanId: number; + /** Client Id */ clientId: any; + /** Button Configuration */ + buttonConfig: LoansAccountButtonConfiguration; constructor(private route: ActivatedRoute, private router: Router, @@ -54,72 +51,69 @@ export class LoansViewComponent implements OnInit { this.recalculateInterest = this.loanDetailsData.recalculateInterest || true; this.status = this.loanDetailsData.status.value; + this.setConditionalButtons(); + } + + // Defines the buttons based on the status of the loan account + setConditionalButtons() { + this.buttonConfig = new LoansAccountButtonConfiguration(this.status); - // Defines the buttons based on the status of the loan account if (this.status === 'Submitted and pending approval') { - this.buttons = ButtonConfig['Submitted and pending approval']; - this.buttons.options.splice(1, 0, { - name: (this.loanDetailsData.loanOfficerName ? 'Change Loan Officer' : 'Assign Loan Officer' ), + this.buttonConfig.addOption({ + name: (this.loanDetailsData.loanOfficerName ? 'Change Loan Officer' : 'Assign Loan Officer'), taskPermissionName: 'DISBURSE_LOAN' }); if (this.loanDetailsData.isVariableInstallmentsAllowed) { - this.buttons.options.push({ - name: 'Edit Repayment Schedule', - taskPermissionName: 'ADJUST_REPAYMENT_SCHEDULE' - }) ; - } + this.buttonConfig.addOption({ + name: 'Edit Repayment Schedule', + taskPermissionName: 'ADJUST_REPAYMENT_SCHEDULE' + }); + } } else if (this.status === 'Approved') { - this.buttons = ButtonConfig['Approved']; - this.buttons.singlebuttons.splice(1, 0, { - name: (this.loanDetailsData.loanOfficerName ? 'Change Loan Officer' : 'Assign Loan Officer' ), + this.buttonConfig.addButton({ + name: (this.loanDetailsData.loanOfficerName ? 'Change Loan Officer' : 'Assign Loan Officer'), icon: 'fa fa-user', taskPermissionName: 'DISBURSE_LOAN' }); } else if (this.status === 'Active') { - this.buttons = ButtonConfig['Active']; if (this.loanDetailsData.canDisburse) { - this.buttons.singlebuttons.splice(1, 0, { - name: 'Disburse', - icon: 'fa fa-flag', - taskPermissionName: 'DISBURSE_LOAN' + this.buttonConfig.addButton({ + name: 'Disburse', + icon: 'fa fa-flag', + taskPermissionName: 'DISBURSE_LOAN' }); - this.buttons.singlebuttons.splice(1, 0, { - name: 'Disburse To Savings', - icon: 'fa fa-flag', - taskPermissionName: 'DISBURSETOSAVINGS_LOAN' + this.buttonConfig.addButton({ + name: 'Disburse To Savings', + icon: 'fa fa-flag', + taskPermissionName: 'DISBURSETOSAVINGS_LOAN' }); } // loan officer not assigned to loan, below logic // helps to display otherwise not if (!this.loanDetailsData.loanOfficerName) { - this.buttons.singlebuttons.splice(1, 0, { - name: 'Assign Loan Officer', - icon: 'fa fa-user', - taskPermissionName: 'UPDATELOANOFFICER_LOAN' + this.buttonConfig.addButton({ + name: 'Assign Loan Officer', + icon: 'fa fa-user', + taskPermissionName: 'UPDATELOANOFFICER_LOAN' }); } if (this.recalculateInterest) { - this.buttons.singlebuttons.splice(1, 0, { - name: 'Prepay Loan', - icon: 'fa fa-money', - taskPermissionName: 'REPAYMENT_LOAN' - }); + this.buttonConfig.addButton({ + name: 'Prepay Loan', + icon: 'fa fa-money', + taskPermissionName: 'REPAYMENT_LOAN' + }); } - } else if (this.status === 'Overpaid') { - this.buttons = ButtonConfig['Overpaid']; - } else if (this.status === 'Closed (written off)') { - this.buttons = ButtonConfig['ClosedWrittenOff']; } - } loanAction(button: string) { @@ -146,8 +140,8 @@ export class LoansViewComponent implements OnInit { * Recover from guarantor action */ private recoverFromGuarantor() { - const recoverFromGuarantorDialogRef = this.dialog.open(LoansConfirmationDialogBoxComponent, { - data: { heading: 'Recover from Guarantor', dialogContext: 'Are you sure you want recover from Guarantor ?' } + const recoverFromGuarantorDialogRef = this.dialog.open(ConfirmationDialogComponent, { + data: { heading: 'Recover from Guarantor', dialogContext: 'Are you sure you want recover from Guarantor ?', type: 'Mild' } }); recoverFromGuarantorDialogRef.afterClosed().subscribe((response: any) => { if (response.confirm) { @@ -158,6 +152,9 @@ export class LoansViewComponent implements OnInit { }); } + /** + * Delete loan Account + */ private deleteLoanAccount() { const deleteGuarantorDialogRef = this.dialog.open(DeleteDialogComponent, { data: { deleteContext: `with loan id: ${this.loanId}` } diff --git a/src/app/loans/loans-view/overdue-charges-tab/overdue-charges-tab.component.ts b/src/app/loans/loans-view/overdue-charges-tab/overdue-charges-tab.component.ts index 26bb4f217..66f3f3ef4 100644 --- a/src/app/loans/loans-view/overdue-charges-tab/overdue-charges-tab.component.ts +++ b/src/app/loans/loans-view/overdue-charges-tab/overdue-charges-tab.component.ts @@ -33,7 +33,7 @@ export class OverdueChargesTabComponent implements OnInit { * @param {ActivatedRoute} route Activated Route. */ constructor(private route: ActivatedRoute) { - this.route.data.subscribe(( data: { loanDetailsData: any }) => { + this.route.parent.data.subscribe(( data: { loanDetailsData: any }) => { this.loanDetails = data.loanDetailsData; }); } diff --git a/src/app/loans/loans.module.ts b/src/app/loans/loans.module.ts index 95e2ea480..0dc4fd5e9 100644 --- a/src/app/loans/loans.module.ts +++ b/src/app/loans/loans.module.ts @@ -9,7 +9,7 @@ import { SharedModule } from 'app/shared/shared.module'; import { PipesModule } from '../pipes/pipes.module'; /** Custom Components */ -import { AddLoanChargeComponent } from './add-loan-charge/add-loan-charge.component'; +import { AddLoanChargeComponent } from './loans-view/loan-account-actions/add-loan-charge/add-loan-charge.component'; import { LoansViewComponent } from './loans-view/loans-view.component'; import { GeneralTabComponent } from './loans-view/general-tab/general-tab.component'; import { AccountDetailsComponent } from './loans-view/account-details/account-details.component'; diff --git a/src/app/loans/loans.service.ts b/src/app/loans/loans.service.ts index fef7ed108..3c04f51bb 100644 --- a/src/app/loans/loans.service.ts +++ b/src/app/loans/loans.service.ts @@ -358,4 +358,10 @@ export class LoansService { return this.http.get(`/loans/${loanId}/template`, { params: httpParams }); } + guarantorAccountResource(loanId: string, clientId: any): Observable { + const httpParams = new HttpParams() + .set('clientId', clientId); + return this.http.get(`/loans/${loanId}/guarantors/accounts/template`, { params: httpParams }); + } + } diff --git a/src/app/shared/confirmation-dialog/confirmation-dialog.component.html b/src/app/shared/confirmation-dialog/confirmation-dialog.component.html index 0e0295502..3e5d716ba 100644 --- a/src/app/shared/confirmation-dialog/confirmation-dialog.component.html +++ b/src/app/shared/confirmation-dialog/confirmation-dialog.component.html @@ -4,5 +4,5 @@ Cancel - Confirm + Confirm diff --git a/src/app/shared/confirmation-dialog/confirmation-dialog.component.ts b/src/app/shared/confirmation-dialog/confirmation-dialog.component.ts index 3f9be5997..34ed626c8 100644 --- a/src/app/shared/confirmation-dialog/confirmation-dialog.component.ts +++ b/src/app/shared/confirmation-dialog/confirmation-dialog.component.ts @@ -12,6 +12,7 @@ import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material'; }) export class ConfirmationDialogComponent implements OnInit { + color: string; /** * @param {MatDialogRef} dialogRef Component reference to dialog. * @param {any} data Provides a deleteContext. @@ -20,6 +21,24 @@ export class ConfirmationDialogComponent implements OnInit { @Inject(MAT_DIALOG_DATA) public data: any) { } ngOnInit() { + this.setColor(); } + setColor() { + switch (this.data.type) { + case 'Basic': + this.color = 'primary'; + break; + case 'Mild': + this.color = 'accent'; + break; + case 'Strong': + this.color = 'warn'; + break; + default: + this.color = 'warn'; + } + } + + } diff --git a/src/assets/images/loans.png b/src/assets/images/loans.png new file mode 100644 index 000000000..08c1add56 Binary files /dev/null and b/src/assets/images/loans.png differ