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
record: IdlObject;
display: any;
attributes: any;
- holdingsSummary: any;
+ holdingsSummary: HoldingsSummary[];
+ prefOuHoldingsSummary: HoldingsSummary[];
holdCount: number;
bibCallNumber: string;
firstCallNumber: string;
summary.eResourceUrls = bibSummary.urls;
summary.copies = bibSummary.copies;
summary.firstCallNumber = bibSummary.first_call_number;
+ summary.prefOuHoldingsSummary = bibSummary.pref_ou_copy_counts;
return summary;
}));
summary.holdingsSummary = metabibSummary.copy_counts;
summary.copies = metabibSummary.copies;
summary.firstCallNumber = metabibSummary.first_call_number;
+ summary.prefOuHoldingsSummary = metabibSummary.pref_ou_copy_counts;
return summary;
}));
</div>
<div class="col-lg-2">
<div class="row" [ngClass]="{'pt-2':copyIndex > 0}"
- *ngFor="let copyCount of summary.holdingsSummary; let copyIdx = index">
+ *ngFor="let copyCount of getHoldingsSummaries(); let copyIdx = index">
<div class="float-left text-left w-50">
<span class="pr-1">
{{copyCount.available}} / {{copyCount.count}} items
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';
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);
+ }
}
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/);
$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);