diff --git a/src/app/products/products-mix/products-mix.component.html b/src/app/products/products-mix/products-mix.component.html new file mode 100644 index 000000000..3e2f80509 --- /dev/null +++ b/src/app/products/products-mix/products-mix.component.html @@ -0,0 +1,33 @@ +
+ +
+ +
+ +
+ + Filter + + +
+ +
+ + + + + + + + + + + +
Product Name {{ productMix.productName }}
+ + + +
+
diff --git a/src/app/products/products-mix/products-mix.component.scss b/src/app/products/products-mix/products-mix.component.scss new file mode 100644 index 000000000..24edb63bb --- /dev/null +++ b/src/app/products/products-mix/products-mix.component.scss @@ -0,0 +1,7 @@ +table { + width: 100%; + + .select-row:hover { + cursor: pointer; + } +} diff --git a/src/app/products/products-mix/products-mix.component.spec.ts b/src/app/products/products-mix/products-mix.component.spec.ts new file mode 100644 index 000000000..b180f9939 --- /dev/null +++ b/src/app/products/products-mix/products-mix.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ProductsMixComponent } from './products-mix.component'; + +describe('ProductsMixComponent', () => { + let component: ProductsMixComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ProductsMixComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ProductsMixComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/products/products-mix/products-mix.component.ts b/src/app/products/products-mix/products-mix.component.ts new file mode 100644 index 000000000..26b9648dc --- /dev/null +++ b/src/app/products/products-mix/products-mix.component.ts @@ -0,0 +1,64 @@ +/** Angular Imports */ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { MatTableDataSource, MatPaginator, MatSort } from '@angular/material'; +import { ActivatedRoute } from '@angular/router'; + +/** rxjs Imports */ +import { of } from 'rxjs'; + +/** + * Products Mix component. + */ +@Component({ + selector: 'mifosx-products-mix', + templateUrl: './products-mix.component.html', + styleUrls: ['./products-mix.component.scss'] +}) +export class ProductsMixComponent implements OnInit { + + /** productMix data. */ + productMixData: any; + /** Columns to be displayed in products mix table. */ + displayedColumns: string[] = ['productName']; + /** Data source for products mix table. */ + dataSource: MatTableDataSource; + /** Paginator for manage data tables table. */ + @ViewChild(MatPaginator) paginator: MatPaginator; + /** Sorter for manage data tables table. */ + @ViewChild(MatSort) sort: MatSort; + + /** + * Retrieves the products data from `resolve`. + * @param {ActivatedRoute} route Activated Route. + */ + constructor(private route: ActivatedRoute) { + this.route.data.subscribe(( data: { products: any }) => { + this.productMixData = data.products; + }); + } + + /** + * Filters data in products mix table based on passed value. + * @param {string} filterValue Value to filter data. + */ + applyFilter(filterValue: string) { + this.dataSource.filter = filterValue.trim().toLowerCase(); + } + + /** + * Sets the products mix table. + */ + ngOnInit() { + this.setProductsMix(); + } + + /** + * Initializes the data source, paginator and sorter for products mix table. + */ + setProductsMix() { + this.dataSource = new MatTableDataSource(this.productMixData); + this.dataSource.paginator = this.paginator; + this.dataSource.sort = this.sort; + } + +} diff --git a/src/app/products/products-mix/products-mix.resolver.ts b/src/app/products/products-mix/products-mix.resolver.ts new file mode 100644 index 000000000..27d0a1297 --- /dev/null +++ b/src/app/products/products-mix/products-mix.resolver.ts @@ -0,0 +1,30 @@ +/** 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'; + +/** + * Products Mix data resolver. + */ +@Injectable() +export class ProductsMixResolver implements Resolve { + + /** + * @param {ProductsService} productsService Products service. + */ + constructor(private productsService: ProductsService) {} + + /** + * Returns the products mix data. + * @returns {Observable} + */ + resolve(): Observable { + return this.productsService.getProductMixes(); + } + +} diff --git a/src/app/products/products-routing.module.ts b/src/app/products/products-routing.module.ts index 6e2300553..6e00bd4b6 100644 --- a/src/app/products/products-routing.module.ts +++ b/src/app/products/products-routing.module.ts @@ -19,6 +19,10 @@ import { FixedDepositProductsComponent } from './fixed-deposit-products/fixed-de 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 { ProductsMixComponent } from './products-mix/products-mix.component'; + +/** Custom Resolvers */ +import { ProductsMixResolver } from './products-mix/products-mix.resolver'; /** Products Routes */ const routes: Routes = [ @@ -60,6 +64,14 @@ const routes: Routes = [ }, 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' }, + }, ] } ]) @@ -76,7 +88,8 @@ const routes: Routes = [ providers: [ RecurringDepositProductsResolver, ChargesResolver, - FixedDepositProductsResolver + FixedDepositProductsResolver, + ProductsMixResolver, ] }) export class ProductsRoutingModule { } diff --git a/src/app/products/products.component.html b/src/app/products/products.component.html index 8fbfd0566..290c50d81 100644 --- a/src/app/products/products.component.html +++ b/src/app/products/products.component.html @@ -48,7 +48,7 @@ - + diff --git a/src/app/products/products.module.ts b/src/app/products/products.module.ts index d2328781f..3d5c69abe 100644 --- a/src/app/products/products.module.ts +++ b/src/app/products/products.module.ts @@ -11,6 +11,7 @@ import { ManageTaxConfigurationsComponent } from './manage-tax-configurations/ma 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'; /** * Products Module @@ -27,7 +28,8 @@ import { FixedDepositProductsComponent } from './fixed-deposit-products/fixed-de ManageTaxConfigurationsComponent, RecurringDepositProductsComponent, ChargesComponent, - FixedDepositProductsComponent + FixedDepositProductsComponent, + ProductsMixComponent ], entryComponents: [ ] diff --git a/src/app/products/products.service.ts b/src/app/products/products.service.ts index 844a8469f..a88496916 100644 --- a/src/app/products/products.service.ts +++ b/src/app/products/products.service.ts @@ -42,4 +42,14 @@ export class ProductsService { return this.http.get('/fixeddepositproducts'); } + /** + * Fetches Product mixes. + * @returns {Observable} + */ + getProductMixes(): Observable { + let httpParams = new HttpParams(); + httpParams = httpParams.set('associations', 'productMixes'); + return this.http.get('/loanproducts', { params: httpParams }); + } + }