diff --git a/src/app/pipes/status-lookup.pipe.ts b/src/app/pipes/status-lookup.pipe.ts index d53215c2b..f58871b43 100644 --- a/src/app/pipes/status-lookup.pipe.ts +++ b/src/app/pipes/status-lookup.pipe.ts @@ -25,6 +25,8 @@ export class StatusLookupPipe implements PipeTransform { 'shareAccountStatusType.approved': 'status-approved', 'shareAccountStatusType.active': 'status-active', 'shareAccountStatusType.rejected': 'status-rejected', + 'loanProduct.active': 'status-active', + 'loanProduct.inActive': 'status-inactive' }; return cssClassNameLookup[status]; } diff --git a/src/app/products/loan-products/loan-products.component.html b/src/app/products/loan-products/loan-products.component.html new file mode 100644 index 000000000..f247c36c7 --- /dev/null +++ b/src/app/products/loan-products/loan-products.component.html @@ -0,0 +1,54 @@ +
+ +
+ +
+ +
+ + Filter + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Name {{ loanProduct.name }} Short Name {{ loanProduct.shortName }} Expiry Date {{ loanProduct.closeDate | date }} Status +
+ +
+
+ + + +
+ +
diff --git a/src/app/products/loan-products/loan-products.component.scss b/src/app/products/loan-products/loan-products.component.scss new file mode 100644 index 000000000..1922e7ffa --- /dev/null +++ b/src/app/products/loan-products/loan-products.component.scss @@ -0,0 +1,3 @@ +table { + width: 100%; +} diff --git a/src/app/products/loan-products/loan-products.component.spec.ts b/src/app/products/loan-products/loan-products.component.spec.ts new file mode 100644 index 000000000..ba07bf46d --- /dev/null +++ b/src/app/products/loan-products/loan-products.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LoanProductsComponent } from './loan-products.component'; + +describe('LoanProductsComponent', () => { + let component: LoanProductsComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ LoanProductsComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(LoanProductsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/products/loan-products/loan-products.component.ts b/src/app/products/loan-products/loan-products.component.ts new file mode 100644 index 000000000..347716caf --- /dev/null +++ b/src/app/products/loan-products/loan-products.component.ts @@ -0,0 +1,36 @@ +/** Angular Imports */ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { MatPaginator, MatSort, MatTableDataSource } from '@angular/material'; +import { ActivatedRoute } from '@angular/router'; + +@Component({ + selector: 'mifosx-loan-products', + templateUrl: './loan-products.component.html', + styleUrls: ['./loan-products.component.scss'] +}) +export class LoanProductsComponent implements OnInit { + + loanProductsData: any; + displayedColumns: string[] = ['name', 'shortName', 'closeDate', 'status']; + dataSource: MatTableDataSource; + + @ViewChild(MatPaginator) paginator: MatPaginator; + @ViewChild(MatSort) sort: MatSort; + + constructor(private route: ActivatedRoute) { + this.route.data.subscribe((data: { loanProducts: any }) => { + this.loanProductsData = data.loanProducts; + }); + } + + ngOnInit() { + this.dataSource = new MatTableDataSource(this.loanProductsData); + this.dataSource.paginator = this.paginator; + this.dataSource.sort = this.sort; + } + + applyFilter(filterValue: string) { + this.dataSource.filter = filterValue.trim().toLowerCase(); + } + +} diff --git a/src/app/products/loan-products/loan-products.resolver.ts b/src/app/products/loan-products/loan-products.resolver.ts new file mode 100644 index 000000000..9ba2cd1ba --- /dev/null +++ b/src/app/products/loan-products/loan-products.resolver.ts @@ -0,0 +1,31 @@ +/** Angular Imports */ +import { Injectable } from '@angular/core'; +import { Resolve } from '@angular/router'; + +/** rxjs Imports */ +import { Observable } from 'rxjs'; + +/** Custom Services */ +import { ProductsService } from '../products.service'; + +/** + * Loan products data resolver. + */ +@Injectable() +export class LoanProductsResolver implements Resolve { + + /** + * + * @param {ProductsService} productsService Products service. + */ + constructor(private productsService: ProductsService) {} + + /** + * Returns the loan products data. + * @returns {Observable} + */ + resolve(): Observable { + return this.productsService.getLoanProducts(); + } + +} diff --git a/src/app/products/products-routing.module.ts b/src/app/products/products-routing.module.ts index 69677927a..1b825d5d0 100644 --- a/src/app/products/products-routing.module.ts +++ b/src/app/products/products-routing.module.ts @@ -1,109 +1,125 @@ -/** Angular Imports */ -import { NgModule } from '@angular/core'; -import { Routes, RouterModule } from '@angular/router'; - -/** Routing Imports */ -import { Route } from '../core/route/route.service'; - -/** Translation Imports */ -import { extract } from '../core/i18n/i18n.service'; - -/** Custom Components */ -import { ProductsComponent } from './products.component'; -import { ManageTaxConfigurationsComponent } from './manage-tax-configurations/manage-tax-configurations.component'; -import { RecurringDepositProductsComponent } from './recurring-deposit-products/recurring-deposit-products.component'; -import { ChargesComponent } from './charges/charges.component'; -import { FixedDepositProductsComponent } from './fixed-deposit-products/fixed-deposit-products.component'; -import { ProductsMixComponent } from './products-mix/products-mix.component'; -import { ManageTaxComponentsComponent } from './manage-tax-components/manage-tax-components.component'; - -/** Custom Resolvers */ -import { RecurringDepositProductsResolver } from './recurring-deposit-products/recurring-deposit-products.resolver'; -import { ChargesResolver } from './charges/charges.resolver'; -import { FixedDepositProductsResolver } from './fixed-deposit-products/fixed-deposit-products.resolver'; -import { ProductsMixResolver } from './products-mix/products-mix.resolver'; -import { ManageTaxComponentsResolver } from './manage-tax-components/manage-tax-components.resolver'; - -/** Products Routes */ -const routes: Routes = [ - Route.withShell([ - { - path: 'products', - data: { title: extract('Products'), breadcrumb: 'Products' }, - children: [ - { - path: '', - component: ProductsComponent - }, - { - path: 'tax-configurations', - data: { title: extract('Manage Tax Configurations'), breadcrumb: 'Manage Tax Configurations' }, - children: [ - { - path: '', - component: ManageTaxConfigurationsComponent, - }, - { - path: 'tax-components', - component: ManageTaxComponentsComponent, - resolve: { - taxComponents: ManageTaxComponentsResolver - }, - data: { title: extract('Manage Tax Components'), breadcrumb: 'Tax Components'}, - }, - ] - }, - { - path: 'recurring-deposit-products', - component: RecurringDepositProductsComponent, - resolve: { - recurringDepositProducts: RecurringDepositProductsResolver - }, - data: { title: extract('Recurring Deposit Products'), breadcrumb: 'Recurring Deposit Products' }, - }, - { - path: 'charges', - component: ChargesComponent, - resolve: { - charges: ChargesResolver - }, - data: { title: extract('Charges'), breadcrumb: 'Charges' }, - }, - { - path: 'fixed-deposit-products', - component: FixedDepositProductsComponent, - resolve: { - fixedDepositProducts: FixedDepositProductsResolver - }, - data: { title: extract('Fixed Deposit Products'), breadcrumb: 'Fixed Deposit Products' }, - }, - { - path: 'products-mix', - component: ProductsMixComponent, - resolve: { - products: ProductsMixResolver - }, - data: { title: extract('Products Mix'), breadcrumb: 'Products Mix' }, - }, - ] - } - ]) -]; - -/** - * Products Routing Module - * - * Configures the products routes. - */ -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule], - providers: [ - RecurringDepositProductsResolver, - ChargesResolver, - FixedDepositProductsResolver, - ProductsMixResolver, - ManageTaxComponentsResolver - ] -}) -export class ProductsRoutingModule { } +/** Angular Imports */ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +/** Routing Imports */ +import { Route } from '../core/route/route.service'; + +/** Translation Imports */ +import { extract } from '../core/i18n/i18n.service'; + +/** Custom Components */ +import { ProductsComponent } from './products.component'; +import { LoanProductsComponent } from './loan-products/loan-products.component'; +import { ManageTaxConfigurationsComponent } from './manage-tax-configurations/manage-tax-configurations.component'; +import { RecurringDepositProductsComponent } from './recurring-deposit-products/recurring-deposit-products.component'; +import { ChargesComponent } from './charges/charges.component'; +import { FixedDepositProductsComponent } from './fixed-deposit-products/fixed-deposit-products.component'; +import { ProductsMixComponent } from './products-mix/products-mix.component'; +import { ManageTaxComponentsComponent } from './manage-tax-components/manage-tax-components.component'; + +/** Custom Resolvers */ +import { LoanProductsResolver } from './loan-products/loan-products.resolver'; +import { RecurringDepositProductsResolver } from './recurring-deposit-products/recurring-deposit-products.resolver'; +import { ChargesResolver } from './charges/charges.resolver'; +import { FixedDepositProductsResolver } from './fixed-deposit-products/fixed-deposit-products.resolver'; +import { ProductsMixResolver } from './products-mix/products-mix.resolver'; +import { ManageTaxComponentsResolver } from './manage-tax-components/manage-tax-components.resolver'; + +/** Products Routes */ +const routes: Routes = [ + Route.withShell([ + { + path: 'products', + data: { title: extract('Products'), breadcrumb: 'Products' }, + children: [ + { + path: '', + component: ProductsComponent + }, + { + path: 'loan-products', + data: { title: extract('Loan Products'), breadcrumb: 'Loan Products' }, + children: [ + { + path: '', + component: LoanProductsComponent, + resolve: { + loanProducts: LoanProductsResolver + } + } + ] + }, + { + path: 'tax-configurations', + data: { title: extract('Manage Tax Configurations'), breadcrumb: 'Manage Tax Configurations' }, + children: [ + { + path: '', + component: ManageTaxConfigurationsComponent, + }, + { + path: 'tax-components', + component: ManageTaxComponentsComponent, + resolve: { + taxComponents: ManageTaxComponentsResolver + }, + data: { title: extract('Manage Tax Components'), breadcrumb: 'Tax Components'}, + }, + ] + }, + { + path: 'recurring-deposit-products', + component: RecurringDepositProductsComponent, + resolve: { + recurringDepositProducts: RecurringDepositProductsResolver + }, + data: { title: extract('Recurring Deposit Products'), breadcrumb: 'Recurring Deposit Products' }, + }, + { + path: 'charges', + component: ChargesComponent, + resolve: { + charges: ChargesResolver + }, + data: { title: extract('Charges'), breadcrumb: 'Charges' }, + }, + { + path: 'fixed-deposit-products', + component: FixedDepositProductsComponent, + resolve: { + fixedDepositProducts: FixedDepositProductsResolver + }, + data: { title: extract('Fixed Deposit Products'), breadcrumb: 'Fixed Deposit Products' }, + }, + { + path: 'products-mix', + component: ProductsMixComponent, + resolve: { + products: ProductsMixResolver + }, + data: { title: extract('Products Mix'), breadcrumb: 'Products Mix' }, + }, + ] + } + ]) +]; + +/** + * Products Routing Module + * + * Configures the products routes. + */ +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], + providers: [ + LoanProductsResolver, + RecurringDepositProductsResolver, + ChargesResolver, + FixedDepositProductsResolver, + ProductsMixResolver, + ManageTaxComponentsResolver + ] +}) +export class ProductsRoutingModule { } diff --git a/src/app/products/products.component.html b/src/app/products/products.component.html index 290c50d81..9977b15fe 100644 --- a/src/app/products/products.component.html +++ b/src/app/products/products.component.html @@ -8,7 +8,7 @@ - + diff --git a/src/app/products/products.module.ts b/src/app/products/products.module.ts index 2377514f5..b8776dc29 100644 --- a/src/app/products/products.module.ts +++ b/src/app/products/products.module.ts @@ -1,12 +1,15 @@ /** Angular Imports */ import { NgModule } from '@angular/core'; +import { DatePipe } from '@angular/common'; /** Custom Modules */ import { SharedModule } from '../shared/shared.module'; import { ProductsRoutingModule } from './products-routing.module'; +import { PipesModule } from 'app/pipes/pipes.module'; /** Custom Components */ import { ProductsComponent } from './products.component'; +import { LoanProductsComponent } from './loan-products/loan-products.component'; import { ManageTaxConfigurationsComponent } from './manage-tax-configurations/manage-tax-configurations.component'; import { RecurringDepositProductsComponent } from './recurring-deposit-products/recurring-deposit-products.component'; import { ChargesComponent } from './charges/charges.component'; @@ -22,10 +25,12 @@ import { ManageTaxComponentsComponent } from './manage-tax-components/manage-tax @NgModule({ imports: [ SharedModule, - ProductsRoutingModule + ProductsRoutingModule, + PipesModule ], declarations: [ ProductsComponent, + LoanProductsComponent, ManageTaxConfigurationsComponent, RecurringDepositProductsComponent, ChargesComponent, @@ -34,6 +39,7 @@ import { ManageTaxComponentsComponent } from './manage-tax-components/manage-tax ManageTaxComponentsComponent ], entryComponents: [ - ] + ], + providers: [DatePipe] }) export class ProductsModule { } diff --git a/src/app/products/products.service.ts b/src/app/products/products.service.ts index b98c34c7d..f271dc5f1 100644 --- a/src/app/products/products.service.ts +++ b/src/app/products/products.service.ts @@ -1,58 +1,65 @@ -/** Angular Imports */ -import { Injectable } from '@angular/core'; -import { HttpClient, HttpParams } from '@angular/common/http'; - -/** rxjs Imports */ -import { Observable } from 'rxjs'; - -/** - * Products service. - */ -@Injectable({ - providedIn: 'root' -}) -export class ProductsService { - - /** - * @param {HttpClient} http Http Client to send requests. - */ - constructor(private http: HttpClient) { } - - /** - * @returns {Observable} Recurring deposit products data - */ - getRecurringDepositProducts(): Observable { - return this.http.get('/recurringdepositproducts'); - } - - /** - * @returns {Observable} Charges data - */ - getCharges(): Observable { - return this.http.get('/charges'); - } - - /** - * @returns {Observable} Fixed deposit products data - */ - getFixedDepositProducts(): Observable { - return this.http.get('/fixeddepositproducts'); - } - - /** - * @returns {Observable} Tax Components data - */ - getTaxComponents(): Observable { - return this.http.get('/taxes/component'); - } - - /** - * @returns {Observable} Product mixes data - */ - getProductMixes(): Observable { - let httpParams = new HttpParams(); - httpParams = httpParams.set('associations', 'productMixes'); - return this.http.get('/loanproducts', { params: httpParams }); - } - -} +/** Angular Imports */ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpParams } from '@angular/common/http'; + +/** rxjs Imports */ +import { Observable } from 'rxjs'; + +/** + * Products service. + */ +@Injectable({ + providedIn: 'root' +}) +export class ProductsService { + + /** + * @param {HttpClient} http Http Client to send requests. + */ + constructor(private http: HttpClient) { } + + /** + * @returns {Observable} Loan products data + */ + getLoanProducts(): Observable { + return this.http.get('/loanproducts'); + } + + /** + * @returns {Observable} Recurring deposit products data + */ + getRecurringDepositProducts(): Observable { + return this.http.get('/recurringdepositproducts'); + } + + /** + * @returns {Observable} Charges data + */ + getCharges(): Observable { + return this.http.get('/charges'); + } + + /** + * @returns {Observable} Fixed deposit products data + */ + getFixedDepositProducts(): Observable { + return this.http.get('/fixeddepositproducts'); + } + + /** + * @returns {Observable} Tax Components data + */ + getTaxComponents(): Observable { + return this.http.get('/taxes/component'); + } + + /** + * @returns {Observable} Product mixes data + */ + getProductMixes(): Observable { + let httpParams = new HttpParams(); + httpParams = httpParams.set('associations', 'productMixes'); + return this.http.get('/loanproducts', { params: httpParams }); + } + +} diff --git a/src/assets/styles/_colours.scss b/src/assets/styles/_colours.scss index 474aa9bc1..b38b6a8ce 100644 --- a/src/assets/styles/_colours.scss +++ b/src/assets/styles/_colours.scss @@ -64,6 +64,7 @@ $accent: $peter-river; //Status Colors Defined Here $status-active: #00ce00; +$status-inactive: #666f73; $status-deleted: #000000; $status-pending: #ffa500; $status-approved: #0f36e4; diff --git a/src/assets/styles/_helper.scss b/src/assets/styles/_helper.scss index c5e810f30..c3ac6ec44 100644 --- a/src/assets/styles/_helper.scss +++ b/src/assets/styles/_helper.scss @@ -1673,6 +1673,10 @@ textarea.noresize { color: $status-active; } +.status-inactive { + color: $status-inactive; +} + .status-deleted { color: $status-deleted; }