]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/cat/util.js
syntax
[Evergreen.git] / Open-ILS / xul / staff_client / server / cat / util.js
1 dump('entering cat/util.js\n');
2
3 if (typeof cat == 'undefined') var cat = {};
4 cat.util = {};
5
6 cat.util.EXPORT_OK      = [ 
7         'spawn_copy_editor', 'add_copies_to_bucket', 'show_in_opac', 'spawn_spine_editor', 'transfer_copies',
8 ];
9 cat.util.EXPORT_TAGS    = { ':all' : cat.util.EXPORT_OK };
10
11 cat.util.transfer_copies = function(params) {
12         JSAN.use('util.error'); var error = new util.error();
13         JSAN.use('OpenILS.data'); var data = new OpenILS.data();
14         JSAN.use('util.network'); var network = new util.network();
15         try {
16                 data.stash_retrieve();
17                 if (!data.marked_volume) {
18                         alert('Please mark a volume as the destination from within holdings maintenance and then try this again.');
19                         return;
20                 }
21                 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
22                 var xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" style="overflow: auto">';
23                 if (!params.message) {
24                         params.message = 'Transfer items from their original volumes to ';
25                         params.message += data.hash.aou[ params.owning_lib ].shortname() + "'s volume labelled ";
26                         params.message += '"' + params.volume_label + '" on the following record?';
27                 }
28
29                 xml += '<description>' + params.message + '</description>';
30                 xml += '<hbox><button label="Transfer" name="fancy_submit"/>';
31                 xml += '<button label="Cancel" accesskey="C" name="fancy_cancel"/></hbox>';
32                 xml += '<iframe style="overflow: scroll" flex="1" src="' + urls.XUL_BIB_BRIEF + '?docid=' + params.docid + '"/>';
33                 xml += '</vbox>';
34                 data.temp_transfer = xml; data.stash('temp_transfer');
35                 window.open(
36                         urls.XUL_FANCY_PROMPT
37                         + '?xml_in_stash=temp_transfer'
38                         + '&title=' + window.escape('Item Transfer'),
39                         'fancy_prompt', 'chrome,resizable,modal,width=500,height=300'
40                 );
41                 data.stash_retrieve();
42                 if (data.fancy_prompt_data == '') { alert('Transfer Aborted'); return; }
43
44                 JSAN.use('util.functional');
45
46                 var copies = network.simple_request('FM_ACP_FLESHED_BATCH_RETRIEVE', [ params.copy_ids ]);
47
48                 for (var i = 0; i < copies.length; i++) {
49                         copies[i].call_number( data.marked_volume );
50                         copies[i].circ_lib( params.owning_lib );
51                         copies[i].ischanged( 1 );
52                 }
53
54                 var robj = network.simple_request(
55                         'FM_ACP_FLESHED_BATCH_UPDATE', 
56                         [ ses(), copies, true ], 
57                         null,
58                         {
59                                 'title' : 'Override Transfer Failure?',
60                                 'overridable_events' : [
61                                         1208 /* TITLE_LAST_COPY */,
62                                 ]
63                         }
64                 );
65                 
66                 if (typeof robj.ilsevent != 'undefined') {
67                         throw(robj);
68                 } else {
69                         alert('Items transferred.');
70                 }
71
72         } catch(E) {
73                 error.standard_unexpected_error_alert('All items not likely transferred.',E);
74         }
75 }
76
77 cat.util.spawn_spine_editor = function(selection_list) {
78         JSAN.use('util.error'); var error = new util.error();
79         try {
80                 JSAN.use('util.functional');
81                 xulG.new_tab(
82                         xulG.url_prefix( urls.XUL_SPINE_LABEL ) + '?barcodes=' 
83                         + js2JSON( util.functional.map_list(selection_list,function(o){return o.barcode;}) ),
84                         { 'tab_name' : 'Spine Labels' },
85                         {}
86                 );
87         } catch(E) {
88                 error.standard_unexpected_error_alert('Spine Labels',E);
89         }
90 }
91
92 cat.util.show_in_opac = function(selection_list) {
93         JSAN.use('util.error'); var error = new util.error();
94         var doc_id; var seen = {};
95         try {
96                 for (var i = 0; i < selection_list.length; i++) {
97                         doc_id = selection_list[i].doc_id;
98                         if (!doc_id) {
99                                 alert(selection_list[i].barcode + ' is not cataloged');
100                                 continue;
101                         }
102                         if (typeof seen[doc_id] != 'undefined') {
103                                 continue;
104                         }
105                         seen[doc_id] = true;
106                         var opac_url = xulG.url_prefix( urls.opac_rdetail ) + '?r=' + doc_id;
107                         var content_params = { 
108                                 'session' : ses(),
109                                 'authtime' : ses('authtime'),
110                                 'opac_url' : opac_url,
111                         };
112                         xulG.new_tab(
113                                 xulG.url_prefix(urls.XUL_OPAC_WRAPPER), 
114                                 {'tab_name':'Retrieving title...'}, 
115                                 content_params
116                         );
117                 }
118         } catch(E) {
119                 error.standard_unexpected_error_alert('Error opening catalog for document id = ' + doc_id,E);
120         }
121 }
122
123 cat.util.add_copies_to_bucket = function(selection_list) {
124         JSAN.use('util.functional');
125         JSAN.use('util.window'); var win = new util.window();
126         JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
127         data.cb_temp_copy_ids = js2JSON(
128                 util.functional.map_list(
129                         selection_list,
130                         function (o) {
131                                 if (typeof o.copy_id != 'undefined' && o.copy_id != null) {
132                                         return o.copy_id;
133                                 } else {
134                                         return o;
135                                 }
136                         }
137                 )
138         );
139         data.stash('cb_temp_copy_ids');
140         win.open( 
141                 xulG.url_prefix(urls.XUL_COPY_BUCKETS_QUICK),
142                 'sel_bucket_win' + win.window_name_increment(),
143                 'chrome,resizable,modal,center'
144         );
145 }
146
147 cat.util.spawn_copy_editor = function(list,edit) {
148         try {
149         var obj = {};
150         JSAN.use('OpenILS.data'); obj.data = new OpenILS.data(); obj.data.init({'via':'stash'});
151         JSAN.use('util.network'); obj.network = new util.network();
152         JSAN.use('util.error'); obj.error = new util.error();
153
154         var title = list.length == 1 ? '' : 'Batch '; 
155         title += edit == 1 ? 'Edit' : 'View';
156         title += ' Copy Attributes';
157
158         JSAN.use('util.window'); var win = new util.window();
159         obj.data.temp_copies = undefined; obj.data.stash('temp_copies');
160         obj.data.temp_callnumbers = undefined; obj.data.stash('temp_callnumbers');
161         obj.data.temp_copy_ids = js2JSON(list);
162         obj.data.stash('temp_copy_ids');
163         var w = win.open(
164                 window.xulG.url_prefix(urls.XUL_COPY_EDITOR)
165                         +'?edit='+edit,
166                 title,
167                 'chrome,modal,resizable'
168         );
169         /* FIXME -- need to unique the temp space, and not rely on modalness of window */
170         obj.data.stash_retrieve();
171         if (!obj.data.temp_copies) return;
172         var copies = JSON2js( obj.data.temp_copies );
173         obj.data.temp_copies = undefined; obj.data.stash('temp_copies');
174         obj.data.temp_callnumbers = undefined; obj.data.stash('temp_callnumbers');
175         obj.data.temp_copy_ids = undefined; obj.data.stash('temp_copy_ids');
176         obj.error.sdump('D_CAT','in cat/copy_status, copy editor, copies =\n<<' + copies + '>>');
177         if (edit=='1' && copies!='' && typeof copies != 'undefined') {
178                 try {
179                         var r = obj.network.request(
180                                 api.FM_ACP_FLESHED_BATCH_UPDATE.app,
181                                 api.FM_ACP_FLESHED_BATCH_UPDATE.method,
182                                 [ ses(), copies, true ]
183                         );
184                         /* FIXME -- revisit the return value here */
185                 } catch(E) {
186                         obj.error.standard_unexpected_error_alert('copy update error',E);
187                 }
188         } else {
189                 //alert('not updating');
190         }
191         } catch(E) {
192                 alert(E);
193         }
194 }
195
196 dump('exiting cat/util.js\n');