From: Zavier Banks Date: Thu, 9 Jan 2020 18:45:26 +0000 (+0000) Subject: LP1859701 Cash Reports X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=d2ac2c21d51c9b5d2144456962448c2284baa51a;p=evergreen%2Fmasslnc.git LP1859701 Cash Reports Migrating the DOJO UI for Cash Reports into Angular. The disabling of the different orgs is dependent on bug #1863168. Signed-off-by: Zavier Banks Signed-off-by: Jason Etheridge Signed-off-by: Jane Sandberg Signed-off-by: Michele Morgan --- diff --git a/Open-ILS/src/eg2/src/app/staff/admin/local/admin-local-splash.component.html b/Open-ILS/src/eg2/src/app/staff/admin/local/admin-local-splash.component.html index e527e3b280..92d22f03e4 100644 --- a/Open-ILS/src/eg2/src/app/staff/admin/local/admin-local-splash.component.html +++ b/Open-ILS/src/eg2/src/app/staff/admin/local/admin-local-splash.component.html @@ -15,8 +15,8 @@ routerLink="/staff/admin/local/container/carousel_org_unit"> - + + + + +
+
+
+
+
+
Start Date
+ +
+
+
+
+
End Date
+ +
+
+
+
+
View reports for
+ +
+ +
+
+
+
+ + + +
+ + + + + + +
+
+
+ + +
+ + + + + + + +
+
+
+
+ + + + + + + + + + + + diff --git a/Open-ILS/src/eg2/src/app/staff/admin/local/cash-reports/cash-reports.component.ts b/Open-ILS/src/eg2/src/app/staff/admin/local/cash-reports/cash-reports.component.ts new file mode 100644 index 0000000000..065a9288c8 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/admin/local/cash-reports/cash-reports.component.ts @@ -0,0 +1,178 @@ +import {Component, OnInit, Input, ViewChild} from '@angular/core'; +import {GridComponent} from '@eg/share/grid/grid.component'; +import {GridDataSource, GridColumn, GridRowFlairEntry} from '@eg/share/grid/grid'; +import {IdlService} from '@eg/core/idl.service'; +import {NetService} from '@eg/core/net.service'; +import {AuthService} from '@eg/core/auth.service'; +import {OrgService} from '@eg/core/org.service'; +import {UserDialogComponent} from './user-dialog.component'; + +class DeskTotals { + cash_payment = 0; + check_payment = 0; + credit_card_payment = 0; +}; + +class UserTotals { + forgive_payment = 0; + work_payment = 0; + credit_payment = 0; + goods_payment = 0; +}; + +@Component({ + templateUrl: './cash-reports.component.html' +}) +export class CashReportsComponent implements OnInit { + initDone = false; + deskPaymentDataSource: GridDataSource = new GridDataSource(); + userPaymentDataSource: GridDataSource = new GridDataSource(); + userDataSource: GridDataSource = new GridDataSource(); + deskIdlClass = 'mwps'; + userIdlClass = 'mups'; + selectedOrg = this.org.get(this.auth.user().ws_ou()); + today = new Date(); + startDate = `${this.today.getFullYear()}-${String(this.today.getMonth() + 1).padStart(2, '0')}-${String(this.today.getDate()).padStart(2, '0')}`; + endDate = `${this.today.getFullYear()}-${String(this.today.getMonth() + 1).padStart(2, '0')}-${String(this.today.getDate()).padStart(2, '0')}`; + deskTotals = new DeskTotals(); + userTotals = new UserTotals(); + disabledOrgs = []; + + // Default sort field, used when no grid sorting is applied. + @Input() sortField: string; + @ViewChild('userDialog', { static: true }) userDialog: UserDialogComponent; + @ViewChild('deskPaymentGrid', { static: true }) deskPaymentGrid: GridComponent; + @ViewChild('userPaymentGrid', { static: true }) userPaymentGrid: GridComponent; + @ViewChild('userGrid', { static: true }) userGrid: GridComponent; + + constructor( + private idl: IdlService, + private net: NetService, + private org: OrgService, + private auth: AuthService){} + + ngOnInit() { + this.disabledOrgs = this.getFilteredOrgList(); + this.searchForData(this.startDate, this.endDate); + } + + onRowActivate(userObject) { + if(userObject.user && this.userDataSource.data.length === 0) { + this.userDataSource.data = [userObject.user]; + this.showUserInformation(); + } else { + this.eraseUserGrid(); + } + } + + showUserInformation() { + return new Promise((resolve, reject) => { + this.userDialog.open({size: 'lg'}).subscribe( + result => { + resolve(result); + }, + error => { + reject(error); + } + ); + }); + } + + searchForData(start, end) { + this.userDataSource.data = []; + this.fillGridData(this.deskIdlClass, 'deskPaymentDataSource', + this.net.request( + 'open-ils.circ', + 'open-ils.circ.money.org_unit.desk_payments', + this.auth.token(), this.selectedOrg.id(), start, end)); + this.fillGridData(this.userIdlClass,'userPaymentDataSource', + this.net.request( + 'open-ils.circ', + 'open-ils.circ.money.org_unit.user_payments', + this.auth.token(), this.selectedOrg.id(), start, end)); + } + + fillGridData(idlClass, dataSource, data) { + data.subscribe((result) => { + let dataForTotal; + if(idlClass === this.deskIdlClass) { + dataForTotal = this.getDeskTotal(result); + } else if(idlClass === this.userIdlClass) { + dataForTotal = this.getUserTotal(result); + result.forEach((userObject, index) => { + result[index].user = userObject.usr(); + result[index].usr(userObject.usr().usrname()) + }); + } + if(result.length > 0) { + result.push(dataForTotal); + } + this[dataSource].data = result; + this.eraseUserGrid(); + }); + } + + eraseUserGrid() { + this.userDataSource.data = []; + } + + getDeskTotal(idlObjects) { + this.deskTotals = new DeskTotals(); + if(idlObjects.length > 0) { + let idlObjectFormat = this.idl.create("mwps") + idlObjects.forEach((idlObject) => { + this.deskTotals['cash_payment'] += parseFloat(idlObject.cash_payment()); + this.deskTotals['check_payment'] += parseFloat(idlObject.check_payment()); + this.deskTotals['credit_card_payment'] += parseFloat(idlObject.credit_card_payment()); + }); + idlObjectFormat.cash_payment(this.deskTotals['cash_payment']); + idlObjectFormat.check_payment(this.deskTotals['check_payment']); + idlObjectFormat.credit_card_payment(this.deskTotals['credit_card_payment']); + return idlObjectFormat; + } + } + + getUserTotal(idlObjects) { + this.userTotals = new UserTotals(); + if(idlObjects.length > 0) { + let idlObjectFormat = this.idl.create("mups") + idlObjects.forEach((idlObject, index) => { + this.userTotals['forgive_payment'] += parseFloat(idlObject.forgive_payment()); + this.userTotals['work_payment'] += parseFloat(idlObject.work_payment()); + this.userTotals['credit_payment'] += parseFloat(idlObject.credit_payment()); + this.userTotals['goods_payment'] += parseFloat(idlObject.goods_payment()); + this.userDataSource.data = idlObjects[index].usr(); + }); + idlObjectFormat.forgive_payment(this.userTotals['forgive_payment']); + idlObjectFormat.work_payment(this.userTotals['work_payment']); + idlObjectFormat.credit_payment(this.userTotals['credit_payment']); + idlObjectFormat.goods_payment(this.userTotals['goods_payment']); + return idlObjectFormat; + } + } + + getFilteredOrgList() { + let orgFilter = {canHaveUsers:false} + return this.org.filterList(orgFilter, true); + } + + // getOrgIds(orgs) { + // orgs.forEach((element) => { + // this.disabledOrgs.push(element.id()); + // }); + // return orgs; + // } + + onStartDateChange(date) { + this.startDate = date; + } + + onEndDateChange(date) { + this.endDate = date; + } + + onOrgChange(org) { + this.selectedOrg = org; + this.searchForData(this.startDate, this.endDate); + } +} diff --git a/Open-ILS/src/eg2/src/app/staff/admin/local/cash-reports/cash-reports.module.ts b/Open-ILS/src/eg2/src/app/staff/admin/local/cash-reports/cash-reports.module.ts new file mode 100644 index 0000000000..dec49bb03f --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/admin/local/cash-reports/cash-reports.module.ts @@ -0,0 +1,25 @@ +import {NgModule} from '@angular/core'; +import {TreeModule} from '@eg/share/tree/tree.module'; +import {StaffCommonModule} from '@eg/staff/common.module'; +import {CashReportsComponent} from './cash-reports.component'; +import {UserDialogComponent} from './user-dialog.component' +import {CashReportsRoutingModule} from './routing.module' + +@NgModule({ + declarations: [ + CashReportsComponent, + UserDialogComponent + ], + imports: [ + StaffCommonModule, + TreeModule, + CashReportsRoutingModule + ], + exports: [ + ], + providers: [ + ] +}) + +export class CashReportsModule { +} \ No newline at end of file diff --git a/Open-ILS/src/eg2/src/app/staff/admin/local/cash-reports/routing.module.ts b/Open-ILS/src/eg2/src/app/staff/admin/local/cash-reports/routing.module.ts new file mode 100644 index 0000000000..65f7620c8c --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/admin/local/cash-reports/routing.module.ts @@ -0,0 +1,15 @@ +import {NgModule} from '@angular/core'; +import {RouterModule, Routes} from '@angular/router'; +import {CashReportsComponent} from './cash-reports.component'; + +const routes: Routes = [{ + path: '', + component: CashReportsComponent +}]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) + +export class CashReportsRoutingModule {} \ No newline at end of file diff --git a/Open-ILS/src/eg2/src/app/staff/admin/local/cash-reports/user-dialog.component.html b/Open-ILS/src/eg2/src/app/staff/admin/local/cash-reports/user-dialog.component.html new file mode 100644 index 0000000000..764b4a6ebb --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/admin/local/cash-reports/user-dialog.component.html @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/Open-ILS/src/eg2/src/app/staff/admin/local/cash-reports/user-dialog.component.ts b/Open-ILS/src/eg2/src/app/staff/admin/local/cash-reports/user-dialog.component.ts new file mode 100644 index 0000000000..480e720b18 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/admin/local/cash-reports/user-dialog.component.ts @@ -0,0 +1,29 @@ +import {Component, OnInit, Input, ViewChild} from '@angular/core'; +import {NgbModal, NgbModalOptions} from '@ng-bootstrap/ng-bootstrap'; +import {Observable} from 'rxjs'; +import { DialogComponent } from '@eg/share/dialog/dialog.component'; + +@Component({ + selector:'eg-user-dialog', + templateUrl: './user-dialog.component.html' +}) +export class UserDialogComponent extends DialogComponent implements OnInit { + + ngOnInit() {} + + constructor( + private modal: NgbModal) { + super(modal); + } + + open(args?: NgbModalOptions): Observable { + if (!args) { + args = {}; + } + return super.open(args); + } + + closeEditor() { + this.close(); + } +} diff --git a/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts b/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts index f5bfd13c6d..179817a407 100644 --- a/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts @@ -90,13 +90,18 @@ const routes: Routes = [{ loadChildren: () => import('./field-documentation/field-documentation.module') .then(m => m.FieldDocumentationModule) }, { + path: 'money/cash_reports', + loadChildren: '@eg/staff/admin/local/cash-reports/cash-reports.module#CashReportsModule' +}, { path: 'negative-balances', loadChildren: () => import('./negative-balances/negative-balances.module').then(m => m.NegativeBalancesModule) }, { path: ':schema/:table', component: BasicAdminPageComponent -}]; +} + +]; @NgModule({ imports: [RouterModule.forChild(routes)],