LP1936233 Item status actions menu
authorBill Erickson <berickxx@gmail.com>
Tue, 20 Jul 2021 18:25:37 +0000 (14:25 -0400)
committerBill Erickson <berickxx@gmail.com>
Tue, 20 Jul 2021 18:25:37 +0000 (14:25 -0400)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/src/eg2/src/app/staff/cat/item/status.component.html
Open-ILS/src/eg2/src/app/staff/cat/item/status.component.ts

index b5f917a..944e3e7 100644 (file)
   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>
index 8d204ef..c7afeb6 100644 (file)
@@ -39,6 +39,9 @@ import {MarkDamagedDialogComponent
     } 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'
@@ -93,7 +96,10 @@ export class ItemStatusComponent implements OnInit, AfterViewInit {
         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() {
@@ -360,6 +366,41 @@ export class ItemStatusComponent implements OnInit, AfterViewInit {
 
         })).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()}`);
+        });
+    }
 }