]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/cat/util.js
handle some exceptions during volume/copy transfer, and for copy transfer, set the...
[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('FM_ACP_FLESHED_BATCH_UPDATE', [ ses(), copies, true ], null
55                         {
56                                 'title' : 'Override Transfer Failure?',
57                                 'overridable_events' : [
58                                         1208 /* TITLE_LAST_COPY */,
59                                 ]
60                         }
61                 );
62                 
63                 if (typeof robj.ilsevent != 'undefined') {
64                         throw(robj);
65                 } else {
66                         alert('Items transferred.');
67                 }
68
69         } catch(E) {
70                 error.standard_unexpected_error_alert('All items not likely transferred.',E);
71         }
72 }
73
74 cat.util.spawn_spine_editor = function(selection_list) {
75         JSAN.use('util.error'); var error = new util.error();
76         try {
77                 JSAN.use('util.functional');
78                 xulG.new_tab(
79                         xulG.url_prefix( urls.XUL_SPINE_LABEL ) + '?barcodes=' 
80                         + js2JSON( util.functional.map_list(selection_list,function(o){return o.barcode;}) ),
81                         { 'tab_name' : 'Spine Labels' },
82                         {}
83                 );
84         } catch(E) {
85                 error.standard_unexpected_error_alert('Spine Labels',E);
86         }
87 }
88
89 cat.util.show_in_opac = function(selection_list) {
90         JSAN.use('util.error'); var error = new util.error();
91         var doc_id; var seen = {};
92         try {
93                 for (var i = 0; i < selection_list.length; i++) {
94                         doc_id = selection_list[i].doc_id;
95                         if (!doc_id) {
96                                 alert(selection_list[i].barcode + ' is not cataloged');
97                                 continue;
98                         }
99                         if (typeof seen[doc_id] != 'undefined') {
100                                 continue;
101                         }
102                         seen[doc_id] = true;
103                         var opac_url = xulG.url_prefix( urls.opac_rdetail ) + '?r=' + doc_id;
104                         var content_params = { 
105                                 'session' : ses(),
106                                 'authtime' : ses('authtime'),
107                                 'opac_url' : opac_url,
108                         };
109                         xulG.new_tab(
110                                 xulG.url_prefix(urls.XUL_OPAC_WRAPPER), 
111                                 {'tab_name':'Retrieving title...'}, 
112                                 content_params
113                         );
114                 }
115         } catch(E) {
116                 error.standard_unexpected_error_alert('Error opening catalog for document id = ' + doc_id,E);
117         }
118 }
119
120 cat.util.add_copies_to_bucket = function(selection_list) {
121         JSAN.use('util.functional');
122         JSAN.use('util.window'); var win = new util.window();
123         JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
124         data.cb_temp_copy_ids = js2JSON(
125                 util.functional.map_list(
126                         selection_list,
127                         function (o) {
128                                 if (typeof o.copy_id != 'undefined' && o.copy_id != null) {
129                                         return o.copy_id;
130                                 } else {
131                                         return o;
132                                 }
133                         }
134                 )
135         );
136         data.stash('cb_temp_copy_ids');
137         win.open( 
138                 xulG.url_prefix(urls.XUL_COPY_BUCKETS_QUICK),
139                 'sel_bucket_win' + win.window_name_increment(),
140                 'chrome,resizable,modal,center'
141         );
142 }
143
144 cat.util.spawn_copy_editor = function(list,edit) {
145         try {
146         var obj = {};
147         JSAN.use('OpenILS.data'); obj.data = new OpenILS.data(); obj.data.init({'via':'stash'});
148         JSAN.use('util.network'); obj.network = new util.network();
149         JSAN.use('util.error'); obj.error = new util.error();
150
151         var title = list.length == 1 ? '' : 'Batch '; 
152         title += edit == 1 ? 'Edit' : 'View';
153         title += ' Copy Attributes';
154
155         JSAN.use('util.window'); var win = new util.window();
156         obj.data.temp_copies = undefined; obj.data.stash('temp_copies');
157         obj.data.temp_callnumbers = undefined; obj.data.stash('temp_callnumbers');
158         obj.data.temp_copy_ids = js2JSON(list);
159         obj.data.stash('temp_copy_ids');
160         var w = win.open(
161                 window.xulG.url_prefix(urls.XUL_COPY_EDITOR)
162                         +'?edit='+edit,
163                 title,
164                 'chrome,modal,resizable'
165         );
166         /* FIXME -- need to unique the temp space, and not rely on modalness of window */
167         obj.data.stash_retrieve();
168         if (!obj.data.temp_copies) return;
169         var copies = JSON2js( obj.data.temp_copies );
170         obj.data.temp_copies = undefined; obj.data.stash('temp_copies');
171         obj.data.temp_callnumbers = undefined; obj.data.stash('temp_callnumbers');
172         obj.data.temp_copy_ids = undefined; obj.data.stash('temp_copy_ids');
173         obj.error.sdump('D_CAT','in cat/copy_status, copy editor, copies =\n<<' + copies + '>>');
174         if (edit=='1' && copies!='' && typeof copies != 'undefined') {
175                 try {
176                         var r = obj.network.request(
177                                 api.FM_ACP_FLESHED_BATCH_UPDATE.app,
178                                 api.FM_ACP_FLESHED_BATCH_UPDATE.method,
179                                 [ ses(), copies, true ]
180                         );
181                         /* FIXME -- revisit the return value here */
182                 } catch(E) {
183                         obj.error.standard_unexpected_error_alert('copy update error',E);
184                 }
185         } else {
186                 //alert('not updating');
187         }
188         } catch(E) {
189                 alert(E);
190         }
191 }
192
193 dump('exiting cat/util.js\n');