From 6d31774625174597a4dd3f0132a03edba5d90f83 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Tue, 6 Jul 2021 11:08:37 -0400 Subject: [PATCH] LP1913807 Staff catalog shows preferred lib holdings counts Always show holdings counts for the preferred library (when set) even when the library is not directly in the search scope. Signed-off-by: Bill Erickson Signed-off-by: Galen Charlton --- .../src/app/share/catalog/bib-record.service.ts | 14 ++++++++++- .../app/staff/catalog/result/record.component.html | 2 +- .../app/staff/catalog/result/record.component.ts | 24 +++++++++++++++++++- .../lib/OpenILS/Application/Search/Biblio.pm | 15 ++++++++++++ 4 files changed, 52 insertions(+), 3 deletions(-) diff --git a/Open-ILS/src/eg2/src/app/share/catalog/bib-record.service.ts b/Open-ILS/src/eg2/src/app/share/catalog/bib-record.service.ts index f7e54d3..c64357d 100644 --- a/Open-ILS/src/eg2/src/app/share/catalog/bib-record.service.ts +++ b/Open-ILS/src/eg2/src/app/share/catalog/bib-record.service.ts @@ -23,6 +23,15 @@ interface EResourceUrl { label: string; } +export interface HoldingsSummary { + org_unit: number; + depth: number; + unshadow: number; + count: number; + available: number; + transcendant: number; +} + export class BibRecordSummary { id: number; // == record.id() for convenience metabibId: number; // If present, this is a metabib summary @@ -32,7 +41,8 @@ export class BibRecordSummary { record: IdlObject; display: any; attributes: any; - holdingsSummary: any; + holdingsSummary: HoldingsSummary[]; + prefOuHoldingsSummary: HoldingsSummary[]; holdCount: number; bibCallNumber: string; firstCallNumber: string; @@ -117,6 +127,7 @@ export class BibRecordService { summary.eResourceUrls = bibSummary.urls; summary.copies = bibSummary.copies; summary.firstCallNumber = bibSummary.first_call_number; + summary.prefOuHoldingsSummary = bibSummary.pref_ou_copy_counts; return summary; })); @@ -143,6 +154,7 @@ export class BibRecordService { summary.holdingsSummary = metabibSummary.copy_counts; summary.copies = metabibSummary.copies; summary.firstCallNumber = metabibSummary.first_call_number; + summary.prefOuHoldingsSummary = metabibSummary.pref_ou_copy_counts; return summary; })); diff --git a/Open-ILS/src/eg2/src/app/staff/catalog/result/record.component.html b/Open-ILS/src/eg2/src/app/staff/catalog/result/record.component.html index 4bd0fe1..115d92a 100644 --- a/Open-ILS/src/eg2/src/app/staff/catalog/result/record.component.html +++ b/Open-ILS/src/eg2/src/app/staff/catalog/result/record.component.html @@ -147,7 +147,7 @@
+ *ngFor="let copyCount of getHoldingsSummaries(); let copyIdx = index">
{{copyCount.available}} / {{copyCount.count}} items diff --git a/Open-ILS/src/eg2/src/app/staff/catalog/result/record.component.ts b/Open-ILS/src/eg2/src/app/staff/catalog/result/record.component.ts index bd066a7..ed75801 100644 --- a/Open-ILS/src/eg2/src/app/staff/catalog/result/record.component.ts +++ b/Open-ILS/src/eg2/src/app/staff/catalog/result/record.component.ts @@ -4,7 +4,7 @@ import {Router} from '@angular/router'; import {OrgService} from '@eg/core/org.service'; import {IdlObject} from '@eg/core/idl.service'; import {CatalogService} from '@eg/share/catalog/catalog.service'; -import {BibRecordSummary} from '@eg/share/catalog/bib-record.service'; +import {BibRecordSummary, HoldingsSummary} from '@eg/share/catalog/bib-record.service'; import {CatalogSearchContext} from '@eg/share/catalog/search-context'; import {CatalogUrlService} from '@eg/share/catalog/catalog-url.service'; import {StaffCatalogService} from '../catalog.service'; @@ -132,6 +132,28 @@ export class ResultRecordComponent implements OnInit, OnDestroy { return this.basket.removeRecordIds([this.summary.id]); } } + + getHoldingsSummaries(): HoldingsSummary[] { + if (!this.summary.prefOuHoldingsSummary) { + return this.summary.holdingsSummary; + } + + let match = false; + this.summary.holdingsSummary.some(sum => { + if (Number(sum.org_unit) === Number(this.staffCat.prefOrg.id())) { + return match = true; + } + }); + + if (match) { + // Holdings summary for the pref ou is included in the + // record-level holdings summaries. + return this.summary.holdingsSummary; + } + + return this.summary.holdingsSummary + .concat(this.summary.prefOuHoldingsSummary); + } } diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm index 384677e..9fe2500 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm @@ -3071,6 +3071,7 @@ sub catalog_record_summary { my ($self, $client, $org_id, $record_ids, $options) = @_; my $e = new_editor(); $options ||= {}; + my $pref_ou = $options->{pref_ou}; my $is_meta = ($self->api_name =~ /metabib/); my $is_staff = ($self->api_name =~ /staff/); @@ -3098,6 +3099,20 @@ sub catalog_record_summary { $response->{first_call_number} = get_first_call_number( $e, $rec_id, $org_id, $is_staff, $is_meta, $options); + if ($pref_ou) { + + # If we already have the pref ou copy counts, avoid the extra fetch. + my ($match) = + grep {$_->{org_unit} eq $pref_ou} @{$response->{copy_counts}}; + + if (!$match) { + my ($counts) = $copy_method->run($pref_ou, $rec_id); + ($match) = grep {$_->{org_unit} eq $pref_ou} @$counts; + } + + $response->{pref_ou_copy_counts} = $match; + } + $response->{hold_count} = $U->simplereq('open-ils.circ', $holds_method, $rec_id); -- 1.7.2.5