LP1936233 Item status actions menu
authorBill Erickson <berickxx@gmail.com>
Thu, 15 Jul 2021 16:04:44 +0000 (12:04 -0400)
committerBill Erickson <berickxx@gmail.com>
Thu, 15 Jul 2021 16:09:23 +0000 (12:09 -0400)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/src/eg2/src/app/staff/cat/item/circ-history.component.html
Open-ILS/src/eg2/src/app/staff/cat/item/holds.component.ts
Open-ILS/src/eg2/src/app/staff/cat/item/item.module.ts
Open-ILS/src/eg2/src/app/staff/cat/item/status.component.html
Open-ILS/src/eg2/src/app/staff/cat/item/status.component.ts
Open-ILS/src/eg2/src/app/staff/share/circ/circ.service.ts

index 5ab7414..f1f0b18 100644 (file)
@@ -4,7 +4,7 @@
 <eg-string key="staff.cat.item.circs.billing" i18n-text text="Billing Added">
 </eg-string>
 
-<div class="row" *ngFor="let circ of recentCircs">
+<div class="row mt-3" *ngFor="let circ of recentCircs">
   <div class="col-lg-12 well-table">
     <div class="well-row">
       <div class="well-value">
index 822c714..2344b18 100644 (file)
@@ -53,7 +53,7 @@ export class ItemHoldsTransitsComponent implements OnInit {
             return this.pcrud.search('atc',
                 {target_copy: this.item.id()},
                 {order_by: {atc: 'source_send_time DESC'}, limit: 1}
-            )
+            );
         }))
         .pipe(tap(transit => {
             transit.source(this.org.get(transit.source()));
index 3204e52..fcb84ea 100644 (file)
@@ -8,11 +8,13 @@ import {BillingModule} from '@eg/staff/share/billing/billing.module';
 import {MarkItemMissingPiecesComponent} from './missing-pieces.component';
 import {ItemStatusComponent} from './status.component';
 import {BarcodesModule} from '@eg/staff/share/barcodes/barcodes.module';
+import {BookingModule} from '@eg/staff/share/booking/booking.module';
 import {CircModule} from '@eg/staff/share/circ/circ.module';
 import {ItemSummaryComponent} from './summary.component';
 import {ItemRecentHistoryComponent} from './recent-history.component';
 import {ItemCircHistoryComponent} from './circ-history.component';
 import {ItemHoldsTransitsComponent} from './holds.component';
+import {GroupedMenuModule} from '@eg/share/grouped-menu/grouped-menu.module';
 
 @NgModule({
   declarations: [
@@ -30,8 +32,10 @@ import {ItemHoldsTransitsComponent} from './holds.component';
     HoldingsModule,
     BarcodesModule,
     CircModule,
+    BookingModule,
     PatronModule,
-    BillingModule
+    BillingModule,
+    GroupedMenuModule
   ],
   providers: [
   ]
index f33d454..1efc194 100644 (file)
@@ -3,10 +3,24 @@
 
 <eg-barcode-select #barcodeSelect></eg-barcode-select>
 <eg-circ-components></eg-circ-components>
+<eg-mark-damaged-dialog #markDamagedDialog></eg-mark-damaged-dialog>
+<eg-mark-missing-dialog #markMissingDialog></eg-mark-missing-dialog>
+<eg-copy-alerts-dialog #copyAlertsDialog></eg-copy-alerts-dialog>
+<eg-replace-barcode-dialog #replaceBarcode></eg-replace-barcode-dialog>
+<eg-delete-holding-dialog #deleteHolding></eg-delete-holding-dialog>
 <eg-bucket-dialog #bucketDialog></eg-bucket-dialog>
+<eg-conjoined-items-dialog #conjoinedDialog></eg-conjoined-items-dialog>
+<eg-make-bookable-dialog #makeBookableDialog></eg-make-bookable-dialog>
+<eg-transfer-items #transferItems></eg-transfer-items>
+<eg-transfer-holdings #transferHoldings></eg-transfer-holdings>
+<eg-alert-dialog #transferAlert
+  i18n-dialogTitle i18n-dialogBody
+  dialogTitle="No Target Selected"
+  dialogBody="Please select a suitable transfer target"></eg-alert-dialog>
+
 
 <div class="row">
-  <div class="col-lg-12 form-inline">
+  <div class="col-lg-12 form-inline d-flex">
     <div class="input-group">
       <div class="input-group-prepend">
         <span class="input-group-text" id='barcode-label' i18n>Barcode</span>
         (keyup.enter)="getItemByBarcode()" [(ngModel)]="itemBarcode" 
         aria-describedby="barcode-label"/>
     </div>
-    <button class="btn btn-outline-dark" 
+    <button class="btn btn-outline-dark mr-1
       (click)="getItemByBarcode()" i18n>Submit</button>
+    <eg-help-popover placement="top" i18n-helpText 
+      helpText="Single barcode or list of barcodes separated with commas.">
+    </eg-help-popover>
+
+    <div class="flex-1"></div>
+
+    <eg-grouped-menu i18n-label label="Actions" *ngIf="item && tab != 'list'">
+
+      <eg-grouped-menu-entry i18n-label label="Add Item To Bucket" 
+        (entryClicked)="addToBucket()"></eg-grouped-menu-entry>
+
+      <eg-grouped-menu-entry i18n-label label="Show Record Holds"
+        i18n-group group="Show" [newTab]="true"
+        routerLink="/staff/catalog/record/{{item.call_number().record().id()}}/holds">
+      </eg-grouped-menu-entry>
+
+    </eg-grouped-menu>
+
+    <!-- grouped menu todo -->
+
   </div>
 </div>
 
         <eg-item-holds-transits [item]="item"></eg-item-holds-transits>
       </ng-template>
     </li>
+    <li ngbNavItem="cat">
+      <a ngbNavLink i18n>Cataloging Info</a>
+      <ng-template ngbNavContent>
+        <eg-marc-html [recordId]="item.call_number().record()" recordType="bib">
+        </eg-marc-html>
+      </ng-template>
+    </li>
   </ul>
   <div [ngbNavOutlet]="itemNav"></div>
 
index 7764ba1..bb84666 100644 (file)
@@ -13,8 +13,25 @@ import {CatalogService} from '@eg/share/catalog/catalog.service';
 import {NgbNav, NgbNavChangeEvent} from '@ng-bootstrap/ng-bootstrap';
 import {CopyAlertsDialogComponent
     } from '@eg/staff/share/holdings/copy-alerts-dialog.component';
+import {ReplaceBarcodeDialogComponent
+    } from '@eg/staff/share/holdings/replace-barcode-dialog.component';
+import {DeleteHoldingDialogComponent
+    } from '@eg/staff/share/holdings/delete-volcopy-dialog.component';
 import {BucketDialogComponent
     } from '@eg/staff/share/buckets/bucket-dialog.component';
+import {ConjoinedItemsDialogComponent
+    } from '@eg/staff/share/holdings/conjoined-items-dialog.component';
+import {MakeBookableDialogComponent
+    } from '@eg/staff/share/booking/make-bookable-dialog.component';
+import {TransferItemsComponent
+    } from '@eg/staff/share/holdings/transfer-items.component';
+import {TransferHoldingsComponent
+    } from '@eg/staff/share/holdings/transfer-holdings.component';
+import {AlertDialogComponent} from '@eg/share/dialog/alert.component';
+import {MarkDamagedDialogComponent
+    } from '@eg/staff/share/holdings/mark-damaged-dialog.component';
+import {MarkMissingDialogComponent
+    } from '@eg/staff/share/holdings/mark-missing-dialog.component';
 
 @Component({
   templateUrl: 'status.component.html'
@@ -29,7 +46,29 @@ export class ItemStatusComponent implements OnInit, AfterViewInit {
     tab: string;
 
     @ViewChild('barcodeSelect') private barcodeSelect: BarcodeSelectComponent;
-    @ViewChild('bucketDialog') private bucketDialog: BucketDialogComponent;
+
+    @ViewChild('markDamagedDialog')
+        private markDamagedDialog: MarkDamagedDialogComponent;
+    @ViewChild('markMissingDialog')
+        private markMissingDialog: MarkMissingDialogComponent;
+    @ViewChild('copyAlertsDialog')
+        private copyAlertsDialog: CopyAlertsDialogComponent;
+    @ViewChild('replaceBarcode')
+        private replaceBarcode: ReplaceBarcodeDialogComponent;
+    @ViewChild('deleteHolding')
+        private deleteHolding: DeleteHoldingDialogComponent;
+    @ViewChild('bucketDialog')
+        private bucketDialog: BucketDialogComponent;
+    @ViewChild('conjoinedDialog')
+        private conjoinedDialog: ConjoinedItemsDialogComponent;
+    @ViewChild('makeBookableDialog')
+        private makeBookableDialog: MakeBookableDialogComponent;
+    @ViewChild('transferItems')
+        private transferItems: TransferItemsComponent;
+    @ViewChild('transferHoldings')
+        private transferHoldings: TransferHoldingsComponent;
+    @ViewChild('transferAlert')
+        private transferAlert: AlertDialogComponent;
 
     constructor(
         private router: Router,
@@ -155,6 +194,12 @@ export class ItemStatusComponent implements OnInit, AfterViewInit {
             this.selectInput();
         });
     }
+
+    addToBucket() {
+        this.bucketDialog.bucketClass = 'copy';
+        this.bucketDialog.itemIds = [this.item.id()];
+        this.bucketDialog.open({size: 'lg'});
+    }
 }
 
 
index 7af7d05..a872e74 100644 (file)
@@ -1287,11 +1287,11 @@ export class CircService {
 
         ops.order_by = {aacs: 'xact_start desc'};
 
-        let promise = count ?
+        const promise = count ?
             Promise.resolve(count) : this.getMaxCircDisplayCount(item);
 
-        return promise.then(count => {
-            ops.limit = count;
+        return promise.then(limit => {
+            ops.limit = limit;
             return this.pcrud.search('aacs',
                 {target_copy : item.id()}, ops, {atomic: true}).toPromise();
         });