]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/cat/bib_brief_overlay.js
Merge branch 'master' of git.evergreen-ils.org:Evergreen into QP_bucket_filter
[Evergreen.git] / Open-ILS / xul / staff_client / server / cat / bib_brief_overlay.js
1 dump('loading bib_brief_overlay.js\n');
2
3 function bib_brief_overlay(params) {
4     try {
5
6         var net; var session;
7
8         if (params.network) {
9             net = params.network;
10         } else {
11             JSAN.use('util.network');
12             net = new util.network();
13         }
14
15         if (params.session) {
16             session = params.session;
17         } else {
18             session = ses(); // For some reason, this breaks, starting with an internal instantiation of util.error failing because util.error being an object instead of a constructor
19         }
20
21
22         // See if we have mvr or mvr.id, and possibly retrieve the mvr ourselves
23         if (params.mvr_id && ! params.mvr) {
24             var robj = net.simple_request('MODS_SLIM_RECORD_RETRIEVE.authoritative',[ params.mvr_id ]);
25             if (typeof robj.ilsevent != 'undefined') throw(robj); 
26             params.mvr = robj;
27         }
28         if (params.mvr && !params.mvr_id) params.mvr_id = params.mvr.doc_id();
29
30         // Ditto with the bre
31         if ( (params.bre_id || params.mvr_id) && ! params.bre) {
32             var robj = net.simple_request('FM_BRE_RETRIEVE_VIA_ID.authoritative',[ session, [ (params.bre_id||params.mvr_id) ] ]);
33             if (typeof robj.ilsevent != 'undefined') throw(robj); 
34             params.bre = robj[0];
35         }
36
37         JSAN.use('util.widgets');
38         function exists(name) {
39             var nodes = document.getElementsByAttribute('name',name);
40             return nodes.length > 0;
41         }
42         function set(name,value) {
43             if (params.print_data) {
44                 params.print_data[name] = value;
45                 return 1;
46             }
47             var nodes = document.getElementsByAttribute('name',name); 
48             for (var i = 0; i < nodes.length; i++) {
49                 util.widgets.set_text( nodes[i], value ); 
50             }
51             return nodes.length;
52         }
53         function set_tooltip(name,value) { 
54             if (params.print_data) {
55                 params.print_data[name] = value;
56                 return 1;
57             }
58             var nodes = document.getElementsByAttribute('name',name); 
59             for (var i = 0; i < nodes.length; i++) {
60                 nodes[i].setAttribute('tooltiptext',value);
61             }
62             return nodes.length;
63         }
64
65
66         // Use the list column definitions for rendering the mvr against the elements in bib_brief_overlay.xul
67         JSAN.use('circ.util');
68         var columns = circ.util.columns({});
69         for (var i = 0; i < columns.length; i++) {
70             var c = columns[i];
71             //dump('considering column ' + c.id + '... ');
72             if (c.fm_class == 'mvr' || c.fm_class == 'bre') {
73                 //dump('is an mvr or bre... ');
74                 if (typeof c.render == 'function') { // Non-function renders are deprecated
75                     //dump('render is a function... ');
76                     var value;
77                     try { 
78                         value = c.render( { 'mvr' : params.mvr, 'acp' : params.acp, 'bre' : params.bre } ); 
79                     } catch(E) { 
80                         value = ''; 
81                         //dump('Error in bib_brief_overlay(), with render() for c.id = ' + c.id + ' : ' + E + '\n'); 
82                     }
83                     //dump('value = ' + value + '\n');
84                     var n = set(c.id, value ? value : '');
85                     if (c.id == 'tcn_source') set_tooltip('tcn',value);
86                     if (c.id == 'title') set_tooltip('title',value);
87                     if (c.id == 'author') set_tooltip('author',value);
88                     //dump('set text on ' + n + ' elements\n');
89                 } else {
90                     //dump('render is not a function\n');
91                 }
92             } else {
93                 //dump('is not an mvr or bre\n');
94             }
95         }
96
97         // Let's fetch a bib call number, if the "bib_call_number" field exists
98         // in our display
99         if (exists('bib_call_number')) {
100             JSAN.use('OpenILS.data');
101             var data = new OpenILS.data();
102             var label_class = data.hash.aous[
103                 'cat.default_classification_scheme'
104             ];
105             if (!label_class) {
106                 label_class = 1;
107             }
108             net.simple_request(
109                 'BLOB_MARC_CALLNUMBERS_RETRIEVE',
110                 [params.mvr_id, label_class],
111                 function(req) {
112                     var cn_blob_array = req.getResultObject();
113                     if (! cn_blob_array) { cn_blob_array = []; }
114                     var tooltip_text = '';
115                     for (var i = 0; i < cn_blob_array.length; i++) {
116                         var cn_blob_obj = cn_blob_array[i];
117                         for (var j in cn_blob_obj) {
118                             tooltip_text += j + ' : ' + cn_blob_obj[j] + '\n';
119                         }
120                     }
121                     if (tooltip_text) {
122                         var cn_blob_obj = cn_blob_array[0];
123                         for (var j in cn_blob_obj) {
124                             set('bib_call_number',cn_blob_obj[j]);
125                         }
126                         set_tooltip('bib_call_number',tooltip_text);
127                     }
128                 }
129             );
130         }
131
132         // Let's fetch the hold count for the bib, if the "holds" field exists
133         // in our display
134         if (exists('holds')) {
135             net.simple_request(
136                 'FM_AHR_COUNT_FOR_BRE',
137                 [params.mvr_id],
138                 function(req) {
139                     var hold_count = req.getResultObject();
140                     set('holds',hold_count);
141                 }
142             );
143         }
144
145         // Let's fetch the item count for the bib, if the "items" field exists
146         // in our display
147         if (exists('items')) {
148             JSAN.use('OpenILS.data');
149             var data = new OpenILS.data();
150             net.simple_request(
151                 'FM_ACP_COUNT.authoritative',
152                 [ data.tree.aou.id(), params.mvr_id ],
153                 function(req){
154                     var count_blob = req.getResultObject()[0];
155                     set('items',count_blob.count);
156                     set_tooltip(
157                         'items',
158                         $('catStrings')
159                         ? $('catStrings').getFormattedString(
160                             'staff.cat.bib_brief.items.available.tooltip',
161                             [count_blob.available]
162                         )
163                         : count_blob.available
164                     );
165                 }
166             );
167         }
168
169     } catch(E) {
170         alert(location.href + '\nError in bib_brief_overlay(' + js2JSON(params) + '): ' + E);
171         return;
172     }
173 }