<eg-string key="catalog.record.toast.cleared"
text="Record Marks Cleared"></eg-string>
+<eg-record-bucket-dialog #recordBucketDialog [recordId]="recId">
+</eg-record-bucket-dialog>
+
<div class="row ml-0 mr-0">
<div ngbDropdown placement="bottom-right" class="ml-1">
<button class="btn btn-info" id="otherActionsForDd"
ngbDropdownToggle i18n>Other Actions</button>
<div ngbDropdownMenu aria-labelledby="otherActionsForDd">
+ <button class="dropdown-item" (click)="recordBucketDialog.open({size: 'lg'})">
+ <span i18n>Add To Bucket</span>
+ </button>
<a class="dropdown-item"
href="/eg/staff/acq/legacy/lineitem/related/{{recId}}?target=bib">
<span i18n>View/Place Orders</span>
--- /dev/null
+<ng-template #dialogContent>
+ <div class="modal-header bg-info">
+ <h4 class="modal-title" i18n>Add To Bucket</h4>
+ <button type="button" class="close"
+ i18n-aria-label aria-label="Close"
+ (click)="dismiss('cross_click')">
+ <span aria-hidden="true">×</span>
+ </button>
+ </div>
+ <div class="modal-body">
+ <div class="row">
+ <div class="col-lg-3 font-weight-bold" i18n>Name of existing bucket</div>
+ <div class="col-lg-5">
+ <select
+ class="form-control"
+ placeholder="Existing Bucket..."
+ i18n-placeholder
+ [(ngModel)]="selectedBucket">
+ <option *ngFor="let bkt of buckets"
+ value="{{bkt.id()}}">{{bkt.name()}}</option>
+ </select>
+ </div>
+ <div class="col-lg-4">
+ <button class="btn btn-info" (click)="addToSelected()" i18n
+ [disabled]="!selectedBucket">
+ Add To Selected Bucket
+ </button>
+ </div>
+ </div>
+ <div class="row mt-3">
+ <div class="col-lg-3 font-weight-bold" i18n>Name of new bucket</div>
+ <div class="col-lg-5">
+ <input type="text" class="form-control"
+ placeholder="New Bucket Name..."
+ i18n-placeholder
+ [(ngModel)]="newBucketName"/>
+ </div>
+ <div class="col-lg-4">
+ <button class="btn btn-info" (click)="addToNew()" i18n
+ [disabled]="!newBucketName">
+ Add To New Bucket
+ </button>
+ </div>
+ </div>
+ <div class="row mt-3">
+ <div class="col-lg-3 font-weight-bold" i18n>New bucket description</div>
+ <div class="col-lg-5">
+ <textarea size="3" type="text" class="form-control"
+ placeholder="Optional New Bucket Description..."
+ i18n-placeholder
+ [(ngModel)]="newBucketDesc">
+ </textarea>
+ </div>
+ </div>
+ </div>
+</ng-template>
--- /dev/null
+import {Component, OnInit, Input, Renderer2} from '@angular/core';
+import {NetService} from '@eg/core/net.service';
+import {IdlService} from '@eg/core/idl.service';
+import {EventService} from '@eg/core/event.service';
+import {ToastService} from '@eg/share/toast/toast.service';
+import {AuthService} from '@eg/core/auth.service';
+import {DialogComponent} from '@eg/share/dialog/dialog.component';
+import {NgbModal} from '@ng-bootstrap/ng-bootstrap';
+
+/**
+ * Dialog for adding bib records to new and existing record buckets.
+ */
+
+@Component({
+ selector: 'eg-record-bucket-dialog',
+ templateUrl: 'record-bucket-dialog.component.html'
+})
+
+export class RecordBucketDialogComponent
+ extends DialogComponent implements OnInit {
+
+ selectedBucket: number;
+ newBucketName: string;
+ newBucketDesc: string;
+ buckets: any[];
+
+ recId: number;
+ @Input() set recordId(id: number) {
+ this.recId = id;
+ }
+
+ constructor(
+ private modal: NgbModal, // required for passing to parent
+ private renderer: Renderer2,
+ private toast: ToastService,
+ private idl: IdlService,
+ private net: NetService,
+ private evt: EventService,
+ private auth: AuthService) {
+ super(modal); // required for subclassing
+ }
+
+ ngOnInit() {
+
+ this.onOpen$.subscribe(ok => {
+ // Reset data on dialog open
+
+ this.selectedBucket = null;
+ this.newBucketName = '';
+ this.newBucketDesc = '';
+
+ this.net.request(
+ 'open-ils.actor',
+ 'open-ils.actor.container.retrieve_by_class.authoritative',
+ this.auth.token(), this.auth.user().id(),
+ 'biblio', 'staff_client'
+ ).subscribe(buckets => this.buckets = buckets);
+ });
+ }
+
+ addToSelected() {
+ this.addToBucket(this.selectedBucket);
+ }
+
+ // Create a new bucket then add the record
+ addToNew() {
+ const bucket = this.idl.create('cbreb');
+
+ bucket.owner(this.auth.user().id());
+ bucket.name(this.newBucketName);
+ bucket.description(this.newBucketDesc);
+ bucket.btype('staff_client');
+
+ this.net.request(
+ 'open-ils.actor',
+ 'open-ils.actor.container.create',
+ this.auth.token(), 'biblio', bucket
+ ).subscribe(bktId => {
+ const evt = this.evt.parse(bktId);
+ if (evt) {
+ this.toast.danger(evt.desc);
+ } else {
+ this.addToBucket(bktId);
+ }
+ });
+ }
+
+ // Add the record to the selected existing bucket
+ addToBucket(id: number) {
+ const item = this.idl.create('cbrebi');
+ item.bucket(id);
+ item.target_biblio_record_entry(this.recId);
+ this.net.request(
+ 'open-ils.actor',
+ 'open-ils.actor.container.item.create',
+ this.auth.token(), 'biblio', item
+ ).subscribe(resp => {
+ const evt = this.evt.parse(resp);
+ if (evt) {
+ this.toast.danger(evt.toString());
+ } else {
+ this.close();
+ }
+ });
+ }
+}
+
+
+