From: Jason Etheridge Date: Tue, 25 Aug 2020 14:44:10 +0000 (-0400) Subject: LP1207533 toward UI X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=refs%2Fheads%2Fcollab%2Fphasefx%2Flp1207533;p=working%2FEvergreen.git LP1207533 toward UI Signed-off-by: Jason Etheridge --- diff --git a/Open-ILS/src/eg2/src/app/staff/circ/patron/event-log/event-grid.component.html b/Open-ILS/src/eg2/src/app/staff/circ/patron/event-log/event-grid.component.html new file mode 100644 index 0000000000..663c793967 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/circ/patron/event-log/event-grid.component.html @@ -0,0 +1,6 @@ + + diff --git a/Open-ILS/src/eg2/src/app/staff/circ/patron/event-log/event-grid.component.ts b/Open-ILS/src/eg2/src/app/staff/circ/patron/event-log/event-grid.component.ts new file mode 100644 index 0000000000..6b433816ae --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/circ/patron/event-log/event-grid.component.ts @@ -0,0 +1,94 @@ +import {Component, EventEmitter, Input, Output, OnChanges, OnInit, ViewChild} from '@angular/core'; +import {Router} from '@angular/router'; +import {Observable, from, of} from 'rxjs'; +import {tap, switchMap, mergeMap} from 'rxjs/operators'; +import {AuthService} from '@eg/core/auth.service'; +import {FmRecordEditorComponent} from '@eg/share/fm-editor/fm-editor.component'; +import {FormatService} from '@eg/core/format.service'; +import {GridComponent} from '@eg/share/grid/grid.component'; +import {GridDataSource} from '@eg/share/grid/grid'; +import {IdlService, IdlObject} from '@eg/core/idl.service'; +import {PcrudService} from '@eg/core/pcrud.service'; +import {Pager} from '@eg/share/util/pager'; +import {ToastService} from '@eg/share/toast/toast.service'; +import {NetService} from '@eg/core/net.service'; +import {OrgService} from '@eg/core/org.service'; + +// A filterable grid of A/T events for circ or ahr hook core types + +@Component({ + selector: 'eg-event-grid', + templateUrl: './event-grid.component.html' +}) + +export class EventGridComponent implements OnChanges, OnInit { + + @Input() patron: number; + @Input() event_type: string; + + gridSource: GridDataSource; + numRowsSelected: number; + + @ViewChild('grid', { static: true }) grid: GridComponent; + + constructor( + private idl: IdlService, + private auth: AuthService, + private format: FormatService, + private pcrud: PcrudService, + private router: Router, + private toast: ToastService, + private net: NetService, + private org: OrgService + ) { + + } + + ngOnInit() { + this.gridSource = new GridDataSource(); + + this.gridSource.getRows = (pager: Pager, sort: any[]): Observable => { + // TODO: why is this getting called twice on page load? + + const orderBy: any = {atul: 'id'}; + if (sort.length) { + orderBy.atul = sort[0].name + ' ' + sort[0].dir; + } + + // base query to grab everything + const base: Object = {}; + base[this.idl.classes['atul'].pkey] = {'!=' : null}; + base['context_user'] = (this.patron ? this.patron : {'>' : 0}) + + // circs or holds? + if (this.event_type == 'circ') { + base['target_circ'] = { '>' : 0 } + } else { + base['target_hold'] = { '>' : 0 } + } + + const query: any = new Array(); + query.push(base); + + // and add any filters + Object.keys(this.gridSource.filters).forEach(key => { + Object.keys(this.gridSource.filters[key]).forEach(key2 => { + query.push(this.gridSource.filters[key][key2]); + }); + }); + + return this.pcrud.search('atul', + query, { + flesh: 1, + flesh_fields: {atul: ['target_circ', 'target_hold']}, + offset: pager.offset, + limit: pager.limit, + order_by: orderBy + }); + }; + } + + ngOnChanges() { this.reloadGrid(); } + + reloadGrid() { this.grid.reload(); } +} diff --git a/Open-ILS/src/eg2/src/app/staff/circ/patron/event-log/event-log.component.html b/Open-ILS/src/eg2/src/app/staff/circ/patron/event-log/event-log.component.html new file mode 100644 index 0000000000..2ccfdc2e49 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/circ/patron/event-log/event-log.component.html @@ -0,0 +1,5 @@ + + + + + diff --git a/Open-ILS/src/eg2/src/app/staff/circ/patron/event-log/event-log.component.ts b/Open-ILS/src/eg2/src/app/staff/circ/patron/event-log/event-log.component.ts new file mode 100644 index 0000000000..f707467402 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/circ/patron/event-log/event-log.component.ts @@ -0,0 +1,30 @@ +import {Component, OnInit, ViewChild} from '@angular/core'; +import {ActivatedRoute} from '@angular/router'; +import {NetService} from '@eg/core/net.service'; +import {AuthService} from '@eg/core/auth.service'; +import {EventGridComponent} from './event-grid.component'; + +@Component({ + templateUrl: 'event-log.component.html' +}) + +export class EventLogComponent implements OnInit { + patronId: number; + + @ViewChild('eventGrid', { static: true }) eventGrid: EventGridComponent; + + constructor( + private route: ActivatedRoute, + private net: NetService, + private auth: AuthService + ) {} + + ngOnInit() { + // Note: if this is not supplied, the grid will show recent events + // across all patrons, which may be a neat feature... + // TODO: see if we're honoring VIEW_USER permission and patron opt-in + this.patronId = +this.route.snapshot.paramMap.get('patron'); + } +} + + diff --git a/Open-ILS/src/eg2/src/app/staff/circ/patron/event-log/event-log.module.ts b/Open-ILS/src/eg2/src/app/staff/circ/patron/event-log/event-log.module.ts new file mode 100644 index 0000000000..868a470b23 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/circ/patron/event-log/event-log.module.ts @@ -0,0 +1,19 @@ +import {NgModule} from '@angular/core'; +import {StaffCommonModule} from '@eg/staff/common.module'; +import {EventLogRoutingModule} from './routing.module'; +import {EventGridComponent} from './event-grid.component'; +import {EventLogComponent} from './event-log.component'; + +@NgModule({ + declarations: [ + EventGridComponent, + EventLogComponent + ], + imports: [ + StaffCommonModule, + EventLogRoutingModule, + ], +}) + +export class EventLogModule {} + diff --git a/Open-ILS/src/eg2/src/app/staff/circ/patron/event-log/routing.module.ts b/Open-ILS/src/eg2/src/app/staff/circ/patron/event-log/routing.module.ts new file mode 100644 index 0000000000..7196d314e5 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/circ/patron/event-log/routing.module.ts @@ -0,0 +1,19 @@ +import {NgModule} from '@angular/core'; +import {RouterModule, Routes} from '@angular/router'; +import {EventLogComponent} from './event-log.component'; + +const routes: Routes = [ + { path: '', + component: EventLogComponent + }, + { path: ':patron', + component: EventLogComponent + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) + +export class EventLogRoutingModule {} diff --git a/Open-ILS/src/eg2/src/app/staff/circ/patron/routing.module.ts b/Open-ILS/src/eg2/src/app/staff/circ/patron/routing.module.ts index c2b7432e99..a1b4ae680c 100644 --- a/Open-ILS/src/eg2/src/app/staff/circ/patron/routing.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/circ/patron/routing.module.ts @@ -5,6 +5,10 @@ const routes: Routes = [ { path: 'bcsearch', loadChildren: () => import('./bcsearch/bcsearch.module').then(m => m.BcSearchModule) + }, + { path: 'event-log', + loadChildren: () => + import('./event-log/event-log.module').then(m => m.EventLogModule) } ]; diff --git a/Open-ILS/src/templates/staff/circ/patron/index.tt2 b/Open-ILS/src/templates/staff/circ/patron/index.tt2 index a36c758953..3880385569 100644 --- a/Open-ILS/src/templates/staff/circ/patron/index.tt2 +++ b/Open-ILS/src/templates/staff/circ/patron/index.tt2 @@ -177,7 +177,7 @@ angular.module('egCoreMod').run(['egStrings', function(s) {
  • - + [% l('Triggered Events / Notifications') %]