diff --git a/src/app/organization/employees/employees.component.html b/src/app/organization/employees/employees.component.html new file mode 100644 index 000000000..f2d53e318 --- /dev/null +++ b/src/app/organization/employees/employees.component.html @@ -0,0 +1,66 @@ +
+ + + + + +
+ +
+ +
+ + Filter + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Name {{ employee.displayName }} Loan Officer +
+ + +
+
Office {{ employees.officeName }} Status +
+ +
+
+ + + +
+ +
diff --git a/src/app/organization/employees/employees.component.scss b/src/app/organization/employees/employees.component.scss new file mode 100644 index 000000000..9b40653e2 --- /dev/null +++ b/src/app/organization/employees/employees.component.scss @@ -0,0 +1,15 @@ +table { + width: 100%; + + .select-row:hover { + cursor: pointer; + } +} + +.true { + color: #32cd32; +} + +.false { + color: #f44366; +} diff --git a/src/app/organization/employees/employees.component.spec.ts b/src/app/organization/employees/employees.component.spec.ts new file mode 100644 index 000000000..a15bc296f --- /dev/null +++ b/src/app/organization/employees/employees.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EmployeesComponent } from './employees.component'; + +describe('EmployeesComponent', () => { + let component: EmployeesComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ EmployeesComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(EmployeesComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/organization/employees/employees.component.ts b/src/app/organization/employees/employees.component.ts new file mode 100644 index 000000000..820aeea47 --- /dev/null +++ b/src/app/organization/employees/employees.component.ts @@ -0,0 +1,65 @@ +/** 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'; + +/** + * Employees component. + */ +@Component({ + selector: 'mifosx-employees', + templateUrl: './employees.component.html', + styleUrls: ['./employees.component.scss'] +}) +export class EmployeesComponent implements OnInit { + + /** Employees data. */ + employeesData: any; + /** Columns to be displayed in employees table. */ + displayedColumns: string[] = ['displayName', 'isLoanOfficer', 'officeName', 'isActive']; + /** Data source for employees table. */ + dataSource: MatTableDataSource; + + /** Paginator for employees table. */ + @ViewChild(MatPaginator) paginator: MatPaginator; + /** Sorter for employees table. */ + @ViewChild(MatSort) sort: MatSort; + + /** + * Retrieves the employees data from `resolve`. + * @param {ActivatedRoute} route Activated Route. + */ + constructor(private route: ActivatedRoute) { + this.route.data.subscribe(( data: { employees: any }) => { + this.employeesData = data.employees; + }); + } + + /** + * Filters data in employees table based on passed value. + * @param {string} filterValue Value to filter data. + */ + applyFilter(filterValue: string) { + this.dataSource.filter = filterValue.trim().toLowerCase(); + } + + /** + * Sets the employees table. + */ + ngOnInit() { + this.setEmployees(); + } + + /** + * Initializes the data source, paginator and sorter for employees table. + */ + setEmployees() { + this.dataSource = new MatTableDataSource(this.employeesData); + this.dataSource.paginator = this.paginator; + this.dataSource.sort = this.sort; + } + +} diff --git a/src/app/organization/employees/employees.resolver.ts b/src/app/organization/employees/employees.resolver.ts new file mode 100644 index 000000000..76e42e0cc --- /dev/null +++ b/src/app/organization/employees/employees.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 { OrganizationService } from '../organization.service'; + +/** + * Employees data resolver. + */ +@Injectable() +export class EmployeesResolver implements Resolve { + + /** + * @param {OrganizationService} organizationService Organization service. + */ + constructor(private organizationService: OrganizationService) {} + + /** + * Returns the employees data. + * @returns {Observable} + */ + resolve(): Observable { + return this.organizationService.getEmployees(); + } + +} diff --git a/src/app/organization/organization-routing.module.ts b/src/app/organization/organization-routing.module.ts index 20c58b967..dc9f6aede 100644 --- a/src/app/organization/organization-routing.module.ts +++ b/src/app/organization/organization-routing.module.ts @@ -12,10 +12,12 @@ import { extract } from '../core/i18n/i18n.service'; import { OrganizationComponent } from './organization.component'; import { LoanProvisioningCriteriaComponent } from './loan-provisioning-criteria/loan-provisioning-criteria.component'; import { OfficesComponent } from './offices/offices.component'; +import { EmployeesComponent } from './employees/employees.component'; /** Custom Resolvers */ import { LoanProvisioningCriteriaResolver } from './loan-provisioning-criteria/loan-provisioning-criteria.resolver'; import { OfficesResolver } from './offices/offices.resolver'; +import { EmployeesResolver } from './employees/employees.resolver'; /** Organization Routes */ const routes: Routes = [ @@ -43,6 +45,14 @@ const routes: Routes = [ resolve: { offices: OfficesResolver } + }, + { + path: 'employees', + component: EmployeesComponent, + data: { title: extract('Manage Employees'), breadcrumb: 'Manage Employees' }, + resolve: { + employees: EmployeesResolver + } } ] } @@ -59,7 +69,8 @@ const routes: Routes = [ exports: [RouterModule], providers: [ LoanProvisioningCriteriaResolver, - OfficesResolver + OfficesResolver, + EmployeesResolver ] }) export class OrganizationRoutingModule { } diff --git a/src/app/organization/organization.component.html b/src/app/organization/organization.component.html index 7c168185d..eeedb4bb6 100644 --- a/src/app/organization/organization.component.html +++ b/src/app/organization/organization.component.html @@ -24,7 +24,7 @@

Define holidays for office

- + diff --git a/src/app/organization/organization.module.ts b/src/app/organization/organization.module.ts index 0cdf75e93..a0e650c4e 100644 --- a/src/app/organization/organization.module.ts +++ b/src/app/organization/organization.module.ts @@ -9,6 +9,7 @@ import { OrganizationRoutingModule } from './organization-routing.module'; import { OrganizationComponent } from './organization.component'; import { LoanProvisioningCriteriaComponent } from './loan-provisioning-criteria/loan-provisioning-criteria.component'; import { OfficesComponent } from './offices/offices.component'; +import { EmployeesComponent } from './employees/employees.component'; /** * Organization Module @@ -23,7 +24,8 @@ import { OfficesComponent } from './offices/offices.component'; declarations: [ OrganizationComponent, LoanProvisioningCriteriaComponent, - OfficesComponent + OfficesComponent, + EmployeesComponent ] }) export class OrganizationModule { } diff --git a/src/app/organization/organization.service.ts b/src/app/organization/organization.service.ts index 4271fcc6c..f9034a3c5 100644 --- a/src/app/organization/organization.service.ts +++ b/src/app/organization/organization.service.ts @@ -32,4 +32,11 @@ export class OrganizationService { return this.http.get('/offices'); } + /** + * @returns {Observable} Employees data + */ + getEmployees(): Observable { + return this.http.get('/staff'); + } + }