From 02e2155f15fc6f724e8d04f7f3606b3321da6cd1 Mon Sep 17 00:00:00 2001 From: Karan Takalkar Date: Tue, 23 Jun 2020 02:44:29 +0530 Subject: [PATCH] feat: add cashiers list page (#888) Fixes: #757 --- .../organization-routing.module.ts | 16 ++++- src/app/organization/organization.module.ts | 4 +- src/app/organization/organization.service.ts | 9 ++- .../tellers/cashiers/cashiers.component.html | 62 ++++++++++++++++++ .../tellers/cashiers/cashiers.component.scss | 12 ++++ .../cashiers/cashiers.component.spec.ts | 25 ++++++++ .../tellers/cashiers/cashiers.component.ts | 63 +++++++++++++++++++ .../cashier.resolver.ts | 0 .../common-resolvers/cashiers.resolver.ts | 31 +++++++++ .../{ => common-resolvers}/teller.resolver.ts | 0 .../tellers.resolver.ts | 2 +- 11 files changed, 218 insertions(+), 6 deletions(-) create mode 100644 src/app/organization/tellers/cashiers/cashiers.component.html create mode 100644 src/app/organization/tellers/cashiers/cashiers.component.scss create mode 100644 src/app/organization/tellers/cashiers/cashiers.component.spec.ts create mode 100644 src/app/organization/tellers/cashiers/cashiers.component.ts rename src/app/organization/tellers/{ => common-resolvers}/cashier.resolver.ts (100%) create mode 100644 src/app/organization/tellers/common-resolvers/cashiers.resolver.ts rename src/app/organization/tellers/{ => common-resolvers}/teller.resolver.ts (100%) rename src/app/organization/tellers/{ => common-resolvers}/tellers.resolver.ts (90%) diff --git a/src/app/organization/organization-routing.module.ts b/src/app/organization/organization-routing.module.ts index c6e9c3d82..7b2a27036 100644 --- a/src/app/organization/organization-routing.module.ts +++ b/src/app/organization/organization-routing.module.ts @@ -41,6 +41,7 @@ import { DatatableTabsComponent } from './offices/view-office/datatable-tabs/dat import { ViewCampaignComponent } from './sms-campaigns/view-campaign/view-campaign.component'; import { ManageFundsComponent } from './manage-funds/manage-funds.component'; import { ManageCurrenciesComponent } from './currencies/manage-currencies/manage-currencies.component'; +import { CashiersComponent } from './tellers/cashiers/cashiers.component'; /** Custom Resolvers */ import { LoanProvisioningCriteriaResolver } from './loan-provisioning-criteria/loan-provisioning-criteria.resolver'; @@ -52,8 +53,8 @@ import { CurrenciesResolver } from './currencies/currencies.resolver'; import { SmsCampaignsResolver } from './sms-campaigns/common-resolvers/sms-campaigns.resolver'; import { AdhocQueriesResolver } from './adhoc-query/adhoc-queries.resolver'; import { AdhocQueryResolver } from './adhoc-query/adhoc-query.resolver'; -import { TellersResolver } from './tellers/tellers.resolver'; -import { TellerResolver } from './tellers/teller.resolver'; +import { TellersResolver } from './tellers/common-resolvers/tellers.resolver'; +import { TellerResolver } from './tellers/common-resolvers/teller.resolver'; import { PaymentTypesResolver } from './payment-types/payment-types.resolver'; import { PaymentTypeResolver } from './payment-types/payment-type.resolver'; import { PasswordPreferencesTemplateResolver } from './password-preferences/password-preferences-template.resolver'; @@ -64,7 +65,8 @@ import { EditOfficeComponent } from './offices/edit-office/edit-office.component import { AdhocQueryTemplateResolver } from './adhoc-query/adhoc-query-template.resolver'; import { ViewLoanProvisioningCriteriaComponent } from './loan-provisioning-criteria/view-loan-provisioning-criteria/view-loan-provisioning-criteria.component'; import { LoanProvisioningCriteriasResolver } from './loan-provisioning-criteria/loan-provisioning-criterias.resolver'; -import { CashierResolver } from './tellers/cashier.resolver'; +import { CashierResolver } from './tellers/common-resolvers/cashier.resolver'; +import { CashiersResolver } from './tellers/common-resolvers/cashiers.resolver'; import { HolidayResolver } from './holidays/holiday.resolver'; import { OfficeResolver } from './offices/common-resolvers/office.resolver'; import { OfficeDatatableResolver } from './offices/common-resolvers/office-datatable.resolver'; @@ -328,6 +330,13 @@ const routes: Routes = [ path: 'cashiers', data: { title: extract('View Cashiers'), breadcrumb: 'View Cashiers', routeParamBreadcrumb: false }, children: [ + { + path: '', + component: CashiersComponent, + resolve: { + cashiersData: CashiersResolver + } + }, { path: ':id', component: ViewCashierComponent, @@ -471,6 +480,7 @@ const routes: Routes = [ AdhocQueryTemplateResolver, LoanProvisioningCriteriasResolver, CashierResolver, + CashiersResolver, HolidayResolver, OfficeResolver, OfficeDatatableResolver, diff --git a/src/app/organization/organization.module.ts b/src/app/organization/organization.module.ts index 73c53b577..cec7a6419 100644 --- a/src/app/organization/organization.module.ts +++ b/src/app/organization/organization.module.ts @@ -44,6 +44,7 @@ import { MultiRowComponent } from './offices/view-office/datatable-tabs/multi-ro import { ViewCampaignComponent } from './sms-campaigns/view-campaign/view-campaign.component'; import { ManageFundsComponent } from './manage-funds/manage-funds.component'; import { ManageCurrenciesComponent } from './currencies/manage-currencies/manage-currencies.component'; +import { CashiersComponent } from './tellers/cashiers/cashiers.component'; /** * Organization Module @@ -93,7 +94,8 @@ import { ManageCurrenciesComponent } from './currencies/manage-currencies/manage MultiRowComponent, ViewCampaignComponent, ManageFundsComponent, - ManageCurrenciesComponent + ManageCurrenciesComponent, + CashiersComponent ] }) export class OrganizationModule { } diff --git a/src/app/organization/organization.service.ts b/src/app/organization/organization.service.ts index f3ff55218..26b0d4aa4 100644 --- a/src/app/organization/organization.service.ts +++ b/src/app/organization/organization.service.ts @@ -257,7 +257,14 @@ export class OrganizationService { } /** - * Get Cashier data. + * @param {string} tellerId Teller ID of teller. + * @returns {Observable} Cashier data. + */ + getCashiers(tellerId: string): Observable { + return this.http.get(`/tellers/${tellerId}/cashiers`); + } + + /** * @param {string} tellerId Teller ID of teller. * @param {string} cashierId Cashier ID of cashier * @returns {Observable} Cashier data. diff --git a/src/app/organization/tellers/cashiers/cashiers.component.html b/src/app/organization/tellers/cashiers/cashiers.component.html new file mode 100644 index 000000000..ce26bb9a7 --- /dev/null +++ b/src/app/organization/tellers/cashiers/cashiers.component.html @@ -0,0 +1,62 @@ +
+ + + +
+ +
+ +
+ + Filter + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Period {{ cashier.startDate | date }} - {{ cashier.endDate | date }} Cashier/Staff {{ cashier.staffName }} Full Day/Time {{ cashier.isFullDay ? 'Yes' : 'No' }} Vault Actions + + + +
+ + + +
+ +
diff --git a/src/app/organization/tellers/cashiers/cashiers.component.scss b/src/app/organization/tellers/cashiers/cashiers.component.scss new file mode 100644 index 000000000..053fdb11b --- /dev/null +++ b/src/app/organization/tellers/cashiers/cashiers.component.scss @@ -0,0 +1,12 @@ +table { + width: 100%; + .cashier-action-button{ + min-width: 26px; + padding: 0 6px; + margin: 4px; + line-height: 25px; + } + .select-row:hover { + cursor: pointer; + } +} diff --git a/src/app/organization/tellers/cashiers/cashiers.component.spec.ts b/src/app/organization/tellers/cashiers/cashiers.component.spec.ts new file mode 100644 index 000000000..c47ee5fe9 --- /dev/null +++ b/src/app/organization/tellers/cashiers/cashiers.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { CashiersComponent } from './cashiers.component'; + +describe('CashiersComponent', () => { + let component: CashiersComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ CashiersComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(CashiersComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/organization/tellers/cashiers/cashiers.component.ts b/src/app/organization/tellers/cashiers/cashiers.component.ts new file mode 100644 index 000000000..6b93cb9aa --- /dev/null +++ b/src/app/organization/tellers/cashiers/cashiers.component.ts @@ -0,0 +1,63 @@ +/** Angular Imports */ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { MatTableDataSource, MatPaginator, MatSort } from '@angular/material'; +import { ActivatedRoute } from '@angular/router'; + +/** + * Cashiers component. + */ +@Component({ + selector: 'mifosx-cashiers', + templateUrl: './cashiers.component.html', + styleUrls: ['./cashiers.component.scss'] +}) +export class CashiersComponent implements OnInit { + + /** Cashiers data. */ + cashiersData: any; + /** Columns to be displayed in cashiers table. */ + displayedColumns: string[] = ['period', 'staffName', 'isFullDay', 'vaultActions']; + /** Data source for cashiers table. */ + dataSource: MatTableDataSource; + + /** Paginator for cashiers table. */ + @ViewChild(MatPaginator) paginator: MatPaginator; + /** Sorter for cashiers table. */ + @ViewChild(MatSort) sort: MatSort; + + /** + * Retrieves the cashiers data from `resolve`. + * @param {ActivatedRoute} route Activated Route. + */ + constructor(private route: ActivatedRoute) { + this.route.data.subscribe(( data: { cashiersData: any }) => { + this.cashiersData = data.cashiersData.cashiers; + console.log(this.cashiersData); + }); + } + + /** + * Filters data in cashiers table based on passed value. + * @param {string} filterValue Value to filter data. + */ + applyFilter(filterValue: string) { + this.dataSource.filter = filterValue.trim().toLowerCase(); + } + + /** + * Sets the cashiers table. + */ + ngOnInit() { + this.setCashiers(); + } + + /** + * Initializes the data source, paginator and sorter for cashiers table. + */ + setCashiers() { + this.dataSource = new MatTableDataSource(this.cashiersData); + this.dataSource.paginator = this.paginator; + this.dataSource.sort = this.sort; + } + +} diff --git a/src/app/organization/tellers/cashier.resolver.ts b/src/app/organization/tellers/common-resolvers/cashier.resolver.ts similarity index 100% rename from src/app/organization/tellers/cashier.resolver.ts rename to src/app/organization/tellers/common-resolvers/cashier.resolver.ts diff --git a/src/app/organization/tellers/common-resolvers/cashiers.resolver.ts b/src/app/organization/tellers/common-resolvers/cashiers.resolver.ts new file mode 100644 index 000000000..cabe39a26 --- /dev/null +++ b/src/app/organization/tellers/common-resolvers/cashiers.resolver.ts @@ -0,0 +1,31 @@ +/** Angular Imports */ +import { Injectable } from '@angular/core'; +import { Resolve, ActivatedRouteSnapshot } from '@angular/router'; + +/** rxjs Imports */ +import { Observable } from 'rxjs'; + +/** Custom Services */ +import { OrganizationService } from 'app/organization/organization.service'; + +/** + * Cashiers data resolver. + */ +@Injectable() +export class CashiersResolver implements Resolve { + + /** + * @param {OrganizationService} organizationService Organization service. + */ + constructor(private organizationService: OrganizationService) {} + + /** + * Returns the cashiers data. + * @returns {Observable} + */ + resolve(route: ActivatedRouteSnapshot): Observable { + const tellerId = route.parent.paramMap.get('id'); + return this.organizationService.getCashiers(tellerId); + } + +} diff --git a/src/app/organization/tellers/teller.resolver.ts b/src/app/organization/tellers/common-resolvers/teller.resolver.ts similarity index 100% rename from src/app/organization/tellers/teller.resolver.ts rename to src/app/organization/tellers/common-resolvers/teller.resolver.ts diff --git a/src/app/organization/tellers/tellers.resolver.ts b/src/app/organization/tellers/common-resolvers/tellers.resolver.ts similarity index 90% rename from src/app/organization/tellers/tellers.resolver.ts rename to src/app/organization/tellers/common-resolvers/tellers.resolver.ts index 5e0f78fd8..ae97aef22 100644 --- a/src/app/organization/tellers/tellers.resolver.ts +++ b/src/app/organization/tellers/common-resolvers/tellers.resolver.ts @@ -6,7 +6,7 @@ import { Resolve } from '@angular/router'; import { Observable } from 'rxjs'; /** Custom Services */ -import { OrganizationService } from '../organization.service'; +import { OrganizationService } from '../../organization.service'; /** * Tellers data resolver.