From 17f662f90c29b5c9c6afa33c3f18a8e534ff032b Mon Sep 17 00:00:00 2001 From: Mike Rylander Date: Wed, 15 Apr 2020 14:42:59 -0400 Subject: [PATCH] Make provider addresses, contacts, and contact addresses filterable Signed-off-by: Mike Rylander Signed-off-by: Galen Charlton --- .../acq/provider/provider-addresses.component.html | 1 + .../acq/provider/provider-addresses.component.ts | 49 ++++++++++++++++++++++ .../provider-contact-addresses.component.html | 1 + .../provider-contact-addresses.component.ts | 47 +++++++++++++++++++++ .../acq/provider/provider-contacts.component.html | 1 + .../acq/provider/provider-contacts.component.ts | 49 ++++++++++++++++++++++ 6 files changed, 148 insertions(+) diff --git a/Open-ILS/src/eg2/src/app/staff/acq/provider/provider-addresses.component.html b/Open-ILS/src/eg2/src/app/staff/acq/provider/provider-addresses.component.html index 4967b98d4c..80cbd21379 100644 --- a/Open-ILS/src/eg2/src/app/staff/acq/provider/provider-addresses.component.html +++ b/Open-ILS/src/eg2/src/app/staff/acq/provider/provider-addresses.component.html @@ -9,6 +9,7 @@ persistKey="acq.provider.addresses.grid" idlClass="acqpa" [dataSource]="gridSource" [sortable]="true" + [filterable]="true" hideFields="provider" [cellTextGenerator]="cellTextGenerator"> { + filters[filterField].forEach(condition => { + query.push(condition); + }); + }); + return query; + } + getDataSource(): GridDataSource { const gridSource = new GridDataSource(); @@ -95,6 +110,40 @@ export class ProviderAddressesComponent implements OnInit, AfterViewInit { } let addresses = this.provider.addresses() + const query = this.generateSearch(gridSource.filters); + if (query.length) { + query.unshift( { id: addresses.map(a => a.id()) } ); + + const opts = {}; + opts['offset'] = pager.offset; + opts['limit'] = pager.limit; + opts['au_by_id'] = true; + + if (sort.length > 0) { + opts['order_by'] = []; + sort.forEach(sort_clause => { + opts['order_by'].push({ + class: 'acqpa', + field: sort_clause.name, + direction: sort_clause.dir + }); + }); + } + + return this.pcrud.search('acqpa', + query, + opts + ).pipe( + map(res => { + if (this.evt.parse(res)) { + throw throwError(res); + } else { + return res; + } + }), + ); + } + if (sort.length > 0) { addresses = addresses.sort((a, b) => { for (let i = 0; i < sort.length; i++) { diff --git a/Open-ILS/src/eg2/src/app/staff/acq/provider/provider-contact-addresses.component.html b/Open-ILS/src/eg2/src/app/staff/acq/provider/provider-contact-addresses.component.html index cbfd8d394b..219b71e65b 100644 --- a/Open-ILS/src/eg2/src/app/staff/acq/provider/provider-contact-addresses.component.html +++ b/Open-ILS/src/eg2/src/app/staff/acq/provider/provider-contact-addresses.component.html @@ -9,6 +9,7 @@ persistKey="acq.provider.contact.addresses.grid" idlClass="acqpca" [dataSource]="gridSource" [sortable]="true" + [filterable]="true" hideFields="contact" [cellTextGenerator]="cellTextGenerator"> { + filters[filterField].forEach(condition => { + query.push(condition); + }); + }); + return query; + } + getDataSource(): GridDataSource { const gridSource = new GridDataSource(); @@ -101,6 +114,40 @@ export class ProviderContactAddressesComponent implements OnInit, AfterViewInit let contact = this.providerRecord.current().contacts().filter( c => c.id() === cid)[0]; let addresses = contact.addresses(); + const query = this.generateSearch(gridSource.filters); + if (query.length) { + query.unshift( { id: addresses.map(a => a.id()) } ); + + const opts = {}; + opts['offset'] = pager.offset; + opts['limit'] = pager.limit; + opts['au_by_id'] = true; + + if (sort.length > 0) { + opts['order_by'] = []; + sort.forEach(sort_clause => { + opts['order_by'].push({ + class: 'acqpca', + field: sort_clause.name, + direction: sort_clause.dir + }); + }); + } + + return this.pcrud.search('acqpca', + query, + opts + ).pipe( + map(res => { + if (this.evt.parse(res)) { + throw throwError(res); + } else { + return res; + } + }), + ); + } + if (sort.length > 0) { addresses = addresses.sort((a, b) => { for (let i = 0; i < sort.length; i++) { diff --git a/Open-ILS/src/eg2/src/app/staff/acq/provider/provider-contacts.component.html b/Open-ILS/src/eg2/src/app/staff/acq/provider/provider-contacts.component.html index bc11ebe2c7..3a344bf919 100644 --- a/Open-ILS/src/eg2/src/app/staff/acq/provider/provider-contacts.component.html +++ b/Open-ILS/src/eg2/src/app/staff/acq/provider/provider-contacts.component.html @@ -19,6 +19,7 @@ idlClass="acqpc" [dataSource]="gridSource" [sortable]="true" [disableMultiSelect]="true" + [filterable]="true" hideFields="provider" [cellTextGenerator]="cellTextGenerator"> diff --git a/Open-ILS/src/eg2/src/app/staff/acq/provider/provider-contacts.component.ts b/Open-ILS/src/eg2/src/app/staff/acq/provider/provider-contacts.component.ts index 15532061d9..6a85a06a9a 100644 --- a/Open-ILS/src/eg2/src/app/staff/acq/provider/provider-contacts.component.ts +++ b/Open-ILS/src/eg2/src/app/staff/acq/provider/provider-contacts.component.ts @@ -5,6 +5,8 @@ import {Router, ActivatedRoute, ParamMap} from '@angular/router'; import {Pager} from '@eg/share/util/pager'; import {IdlService, IdlObject} from '@eg/core/idl.service'; import {NetService} from '@eg/core/net.service'; +import {PcrudService} from '@eg/core/pcrud.service'; +import {EventService} from '@eg/core/event.service'; import {AuthService} from '@eg/core/auth.service'; import {GridComponent} from '@eg/share/grid/grid.component'; import {GridDataSource, GridCellTextGenerator} from '@eg/share/grid/grid'; @@ -56,6 +58,8 @@ export class ProviderContactsComponent implements OnInit, AfterViewInit { private route: ActivatedRoute, private changeDetector: ChangeDetectorRef, private net: NetService, + private pcrud: PcrudService, + private evt: EventService, private auth: AuthService, private idl: IdlService, private providerRecord: ProviderRecordService, @@ -105,6 +109,17 @@ export class ProviderContactsComponent implements OnInit, AfterViewInit { ); } + generateSearch(filters): any { + const query: any = new Array(); + + Object.keys(filters).forEach(filterField => { + filters[filterField].forEach(condition => { + query.push(condition); + }); + }); + return query; + } + getDataSource(): GridDataSource { const gridSource = new GridDataSource(); @@ -115,6 +130,40 @@ export class ProviderContactsComponent implements OnInit, AfterViewInit { } let contacts = this.provider.contacts() + const query = this.generateSearch(gridSource.filters); + if (query.length) { + query.unshift( { id: contacts.map(a => a.id()) } ); + + const opts = {}; + opts['offset'] = pager.offset; + opts['limit'] = pager.limit; + opts['au_by_id'] = true; + + if (sort.length > 0) { + opts['order_by'] = []; + sort.forEach(sort_clause => { + opts['order_by'].push({ + class: 'acqpc', + field: sort_clause.name, + direction: sort_clause.dir + }); + }); + } + + return this.pcrud.search('acqpc', + query, + opts + ).pipe( + map(res => { + if (this.evt.parse(res)) { + throw throwError(res); + } else { + return res; + } + }), + ); + } + if (sort.length > 0) { contacts = contacts.sort((a, b) => { for (let i = 0; i < sort.length; i++) { -- 2.11.0