dialogTitle="No Target Selected"
dialogBody="Please select a suitable transfer target"></eg-alert-dialog>
+<eg-string key="staff.cat.item.no-acq" i18n-text
+ text="There is no corresponding purchase order for this item.">
+</eg-string>
+
<div class="row">
<div class="col-lg-12 form-inline d-flex">
<div class="input-group">
label="Link as Conjoined to Marked Bib Record"
(entryClicked)="openConjoinedDialog([item])">
</eg-grouped-menu-entry>
- <eg-grouped-menu-entry i18n-label label="Delete Items"
- (entryClicked)="deleteItems([item])">
+
+ <eg-grouped-menu-entry i18n-label label="Update Inventory"
+ (entryClicked)="updateInventory([item])">
+ </eg-grouped-menu-entry>
+
+ <eg-grouped-menu-entry i18n-label label="Print Labels"
+ (entryClicked)="printLabels([item])">
</eg-grouped-menu-entry>
<!-- Add -->
i18n-group group="Add" (entryClicked)="addRecordToBucket([item])">
</eg-grouped-menu-entry>
+ <!-- Edit -->
+ <eg-grouped-menu-entry i18n-label label="Delete Items"
+ i18n-group group="Edit" (entryClicked)="deleteItems([item])">
+ </eg-grouped-menu-entry>
+
<!-- Show -->
<eg-grouped-menu-entry i18n-label label="Show Record Holds"
i18n-group group="Show" [newTab]="true"
i18n-group group="Show" [newTab]="true"
routerLink="/staff/catalog/record/{{item.call_number().record().id()}}">
</eg-grouped-menu-entry>
+ <eg-grouped-menu-entry i18n-label label="Show Originating Acquisition"
+ i18n-group group="Show" (entryClicked)="showAcq([item])">
+ </eg-grouped-menu-entry>
+
<!-- Booking -->
<eg-grouped-menu-entry i18n-label label="Make Items Bookable"
i18n-group group="Booking" (entryClicked)="manageReservations([item])">
</eg-grouped-menu-entry>
+ <!-- Circulation -->
<eg-grouped-menu-entry i18n-label label="Check In Items"
i18n-group group="Circulation" (entryClicked)="checkinItems([item])">
</eg-grouped-menu-entry>
} from '@eg/staff/share/holdings/mark-damaged-dialog.component';
import {MarkMissingDialogComponent
} from '@eg/staff/share/holdings/mark-missing-dialog.component';
+import {AnonCacheService} from '@eg/share/util/anon-cache.service';
+import {ToastService} from '@eg/share/toast/toast.service';
+import {StringService} from '@eg/share/string/string.service';
@Component({
templateUrl: 'status.component.html'
private evt: EventService,
private cat: CatalogService,
private worklog: WorkLogService,
- private holdings: HoldingsService
+ private holdings: HoldingsService,
+ private toast: ToastService,
+ private strings: StringService,
+ private anonCache: AnonCacheService
) {}
ngOnInit() {
})).subscribe();
}
+
+ updateInventory(copies: IdlObject[]) {
+ if (copies.length === 0) { return; }
+
+ this.net.request(
+ 'open-ils.circ',
+ 'open-ils.circ.circulation.update_latest_inventory',
+ this.auth.token(), {copy_list: copies.map(c => c.id())}
+ ).toPromise().then(_ => this.load());
+ }
+
+ printLabels(copies: IdlObject[]) {
+ if (copies.length === 0) { return; }
+
+ this.anonCache.setItem(null,
+ 'print-labels-these-copies', {copies: copies.map(c => c.id())})
+ .then(key => window.open(`/eg/staff/cat/printlabels/${key}`));
+ }
+
+ showAcq(copies: IdlObject[]) {
+ if (copies.length === 0) { return; }
+
+ this.net.request('open-ils.acq',
+ 'open-ils.acq.lineitem.retrieve.by_copy_id',
+ this.auth.token(), copies[0].id()
+ ).subscribe(resp => {
+
+ if (this.evt.parse(resp)) {
+ return this.strings.interpolate('staff.cat.item.no-acq')
+ .then(str => this.toast.info(str));
+ }
+
+ window.open(`/eg/staff/acq/legacy/po/view/${resp.purchase_order()}`);
+ });
+ }
}