From: Galen Charlton Date: Fri, 29 Jul 2022 01:47:47 +0000 (+0000) Subject: LP#1942220: (follow-up) implement link to catalog X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=037fe5cd5e41f4707342d69bb1ef54b56c86a847;p=working%2FEvergreen.git LP#1942220: (follow-up) implement link to catalog Signed-off-by: Galen Charlton --- diff --git a/Open-ILS/src/eg2/src/app/staff/acq/lineitem/bib-finder-dialog.component.css b/Open-ILS/src/eg2/src/app/staff/acq/lineitem/bib-finder-dialog.component.css new file mode 100644 index 0000000000..56fc5d395e --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/acq/lineitem/bib-finder-dialog.component.css @@ -0,0 +1,3 @@ +.bib-finder-results-row:nth-child(even) { + background-color: rgba(0,0,0,.03); +} diff --git a/Open-ILS/src/eg2/src/app/staff/acq/lineitem/bib-finder-dialog.component.html b/Open-ILS/src/eg2/src/app/staff/acq/lineitem/bib-finder-dialog.component.html new file mode 100644 index 0000000000..5adebb5b0a --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/acq/lineitem/bib-finder-dialog.component.html @@ -0,0 +1,57 @@ + +
+ + + +
+
+ diff --git a/Open-ILS/src/eg2/src/app/staff/acq/lineitem/bib-finder-dialog.component.ts b/Open-ILS/src/eg2/src/app/staff/acq/lineitem/bib-finder-dialog.component.ts new file mode 100644 index 0000000000..630400d8e7 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/acq/lineitem/bib-finder-dialog.component.ts @@ -0,0 +1,107 @@ +import {Component, Input, ViewChild} from '@angular/core'; +import {Observable} from 'rxjs'; +import {map} from 'rxjs/operators'; +import {NgbModal, NgbModalOptions} from '@ng-bootstrap/ng-bootstrap'; +import {DialogComponent} from '@eg/share/dialog/dialog.component'; +import {NetService} from '@eg/core/net.service'; +import {EgEvent, EventService} from '@eg/core/event.service'; +import {IdlService, IdlObject} from '@eg/core/idl.service'; +import {ComboboxEntry} from '@eg/share/combobox/combobox.component'; +import {LineitemService} from './lineitem.service'; +import {BibRecordService, BibRecordSummary} from '@eg/share/catalog/bib-record.service'; + +@Component({ + selector: 'eg-acq-bib-finder-dialog', + styleUrls: ['./bib-finder-dialog.component.css'], + templateUrl: './bib-finder-dialog.component.html' +}) + +export class BibFinderDialogComponent extends DialogComponent { + @Input() liId: number; + + queryString: string; + lineitem: IdlObject; + results: BibRecordSummary[] = []; + doingSearch = false; + bibToDisplay: number; + + constructor( + private modal: NgbModal, + private net: NetService, + private evt: EventService, + private bib: BibRecordService, + private liService: LineitemService + ) { + super(modal); + } + + open(args?: NgbModalOptions): Observable { + if (!args) { + args = {}; + } + + this.queryString = ''; + this.results.length = 0; + this.doingSearch = false; + this.bibToDisplay = null; + this.liService.getFleshedLineitems([this.liId], {fromCache: true}).subscribe(liStruct => { + this.lineitem = liStruct.lineitem; + this.queryString = this._buildDefaultQuery(this.lineitem); + }); + return super.open(args); + } + + _buildDefaultQuery(li: IdlObject): string { + let query = ''; + ['title', 'author'].forEach(field => { + const attr = this.liService.getFirstAttributeValue(li, field); + if (attr.length) { + query += field + ':' + attr + ' '; + } + }); + ['isbn', 'issn', 'upc'].forEach(field => { + const attr = this.liService.getFirstAttributeValue(li, field); + if (attr.length) { + query += 'identifier|' + field + ':' + attr + ' '; + } + }); + return query; + } + + submitSearch() { + this.results.length = 0; + this.bibToDisplay = null; + this.doingSearch = true; + this.net.request( + 'open-ils.search', + 'open-ils.search.biblio.multiclass.query.staff', + {limit: 15}, this.queryString, 1 + ).subscribe(response => { + const evt = this.evt.parse(response); + if (evt) { + this.doingSearch = false; + return; + } + const ids = response.ids.map(x => x[0]); + if (ids.length < 1) { + this.doingSearch = false; + return; + } + const bibSummaries: {[id: number]: BibRecordSummary} = {}; + this.bib.getBibSummaries(ids).subscribe( + summary => bibSummaries[summary.id] = summary, + err => {}, + () => { + this.doingSearch = false; + ids.forEach(id => { + if (bibSummaries[id]) { + this.results.push(bibSummaries[id]); + } + }); + } + ); + }); + } +} + + diff --git a/Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem-list.component.html b/Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem-list.component.html index 825c7489f6..a67193aeaa 100644 --- a/Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem-list.component.html +++ b/Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem-list.component.html @@ -3,6 +3,7 @@ + @@ -450,7 +451,15 @@ - + + | + + library_books + Link to Catalog + + | { + if (!bibId) { return; } + + const lis: IdlObject[] = []; + this.liService.getFleshedLineitems([liId], { fromCache: true }).subscribe( + liStruct => { + liStruct.lineitem.eg_bib_id(bibId); + liStruct.lineitem.attributes([]); + lis.push(liStruct.lineitem); + }, + err => { }, + () => { + this.net.request( + 'open-ils.acq', + 'open-ils.acq.lineitem.update', + this.auth.token(), lis + ).toPromise().then(resp => this.postBatchAction(resp, [liId])); + } + ); + }); + } + batchUpdateCopiesOnLineitems() { const ids = Object.keys(this.selected).filter(id => this.selected[id]); diff --git a/Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem.module.ts b/Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem.module.ts index d98742a502..89d278062a 100644 --- a/Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem.module.ts @@ -21,6 +21,7 @@ import {CancelDialogComponent} from './cancel-dialog.component'; import {AddToPoDialogComponent} from './add-to-po-dialog.component'; import {DeleteLineitemsDialogComponent} from './delete-lineitems-dialog.component'; import {AddCopiesDialogComponent} from './add-copies-dialog.component'; +import {BibFinderDialogComponent} from './bib-finder-dialog.component'; import {BatchUpdateCopiesDialogComponent} from './batch-update-copies-dialog.component'; import {LinkInvoiceDialogComponent} from './link-invoice-dialog.component'; import {ExportAttributesDialogComponent} from './export-attributes-dialog.component'; @@ -45,6 +46,7 @@ import {AcqCommonModule} from '../acq-common.module'; AddToPoDialogComponent, DeleteLineitemsDialogComponent, AddCopiesDialogComponent, + BibFinderDialogComponent, BatchUpdateCopiesDialogComponent, LinkInvoiceDialogComponent, ExportAttributesDialogComponent,