]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/eg2/src/app/staff/share/holdings/holdings.service.ts
LP1888723 Angular Holdings Maintenance / Item Attributes Editor
[working/Evergreen.git] / Open-ILS / src / eg2 / src / app / staff / share / holdings / holdings.service.ts
1 /**
2  * Common code for mananging holdings
3  */
4 import {Injectable, EventEmitter} from '@angular/core';
5 import {IdlObject, IdlService} from '@eg/core/idl.service';
6 import {NetService} from '@eg/core/net.service';
7 import {AnonCacheService} from '@eg/share/util/anon-cache.service';
8 import {PcrudService} from '@eg/core/pcrud.service';
9 import {AuthService} from '@eg/core/auth.service';
10 import {IdlObject} from '@eg/core/idl.service';
11 import {EventService} from '@eg/core/event.service';
12 import {PcrudService} from '@eg/core/pcrud.service';
13
14 export interface CallNumData {
15     owner?: number;
16     label?: string;
17     fast_add?: boolean;
18     barcode?: string;
19     callnumber?: number;
20 }
21
22 @Injectable()
23 export class HoldingsService {
24
25     constructor(
26         private net: NetService,
27         private auth: AuthService,
28         private pcrud: PcrudService,
29         private evt: EventService,
30         private anonCache: AnonCacheService
31     ) {}
32
33     // Open the holdings editor UI in a new browser window/tab.
34     spawnAddHoldingsUi(
35         recordId: number,                  // Bib record ID
36         editExistingCallNums?: number[],   // Add copies to / modify existing CNs
37         newCallNumData?: CallNumData[],    // Creating new call numbers
38         editCopyIds?: number[],            // Edit existing items
39         hideCopies?: boolean,              // Hide the copy edit pane
40         hideVols?: boolean) {
41
42         const raw: any[] = [];
43
44         if (editExistingCallNums) {
45             editExistingCallNums.forEach(
46                 callNumId => raw.push({callnumber: callNumId}));
47         } else if (newCallNumData) {
48             newCallNumData.forEach(data => raw.push(data));
49         }
50
51         this.anonCache.setItem(null, 'edit-these-copies', {
52             record_id: recordId,
53             raw: raw,
54             copies: editCopyIds,
55             hide_vols : hideVols === true,
56             hide_copies : hideCopies === true
57         }).then(key => {
58             if (!key) {
59                 console.error('Could not create holds cache key!');
60                 return;
61             }
62             setTimeout(() => {
63                 const tab = hideVols ? 'attrs' : 'holdings';
64                 const url = `/eg2/staff/cat/volcopy/${tab}/session/${key}`;
65                 window.open(url, '_blank');
66             });
67         });
68     }
69
70     // Using open-ils.actor.get_barcodes
71     getItemIdFromBarcode(barcode: string): Promise<number> {
72         return this.net.request(
73             'open-ils.actor',
74             'open-ils.actor.get_barcodes',
75             this.auth.token(), this.auth.user().ws_ou(), 'asset', barcode
76         ).toPromise().then(resp => {
77             if (this.evt.parse(resp)) {
78                 return Promise.reject(resp);
79             } else if (resp.length === 0) {
80                 return null;
81             } else {
82                 return resp[0].id;
83             }
84         });
85     }
86
87     /* TODO: make these more configurable per lp1616170 */
88     getMagicCopyStatuses(): Promise<number[]> {
89         return Promise.resolve([
90             1,  // Checked out
91             3,  // Lost
92             6,  // In transit
93             8,  // On holds shelf
94             16, // Long overdue
95             18  // Canceled Transit
96         ]);
97     }
98 }
99