1 function $(id) { return document.getElementById(id); }
5 if (typeof JSAN == 'undefined') { throw( $("commonStrings").getString('common.jsan.missing') ); }
6 JSAN.errorLevel = "die"; // none, warn, or die
7 JSAN.addRepository('/xul/server/');
9 dojo.require('openils.PermaCrud');
10 JSAN.use('util.error'); g.error = new util.error();
11 JSAN.use('util.network'); g.network = new util.network();
12 JSAN.use('util.date'); JSAN.use('util.money'); JSAN.use('patron.util');
13 JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
15 g.error.sdump('D_TRACE','my_init() for hold_notices.xul');
17 g.pcrud = new openils.PermaCrud({authtoken :ses()});
21 if (xulG.ahr_id) fetch_and_render_all();
23 if (xul_param('when_done')) {
24 xul_param('when_done')();
28 try { g.error.standard_unexpected_error_alert('/xul/server/patron/hold_notices.xul',E); } catch(E) { alert('FIXME: ' + js2JSON(E)); }
32 function my_cleanup() {
36 try { g.error.standard_unexpected_error_alert('/xul/server/patron/hold_notices.xul',E); } catch(E) { alert('FIXME: ' + js2JSON(E)); }
40 function fetch_and_render_all(do_not_refresh_parent_interface) {
42 if (!xulG.ahr_id) { return; }
46 if (xulG.patron_rendered_elsewhere) {
54 var x = document.getElementById('bib_brief_box'); while (x.firstChild) x.removeChild(x.lastChild);
55 if (xulG.bib_rendered_elsewhere) {
60 var bib_brief = document.createElement('iframe'); x.appendChild(bib_brief);
61 bib_brief.setAttribute('flex',1);
62 bib_brief.setAttribute('src',urls.XUL_BIB_BRIEF);
63 get_contentWindow(bib_brief).xulG = { 'docid' : g.blob.mvr.doc_id() };
66 retrieve_notes(); render_notes();
68 retrieve_notifications(); render_notifications();
70 if (!do_not_refresh_parent_interface) {
71 if (typeof xulG.clear_and_retrieve == 'function') {
72 xulG.clear_and_retrieve();
77 alert('Error in hold_details.js, fetch_and_render_all(): ' + E);
81 function fetch_hold(id) {
83 g.ahr_id = xulG.ahr_id;
86 delete xulG.blob; // one-time deal for speed
88 g.blob = g.network.simple_request('FM_AHR_BLOB_RETRIEVE',[ ses(), g.ahr_id ]);
89 if (typeof g.ahr.ilsevent != 'undefined') { throw(g.ahr); }
92 g.ahr.status( g.blob.status );
94 alert('Error in hold_details.js, fetch_hold(): ' + E);
98 function render_patron() {
100 JSAN.use('patron.util');
101 var au_obj = patron.util.retrieve_fleshed_au_via_id( ses(), g.ahr.usr() );
103 $('patron_name').setAttribute('value',
104 patron.util.format_name( au_obj ) + ' : ' + au_obj.card().barcode()
109 function init_list() {
110 JSAN.use('circ.util');
111 var columns = circ.util.hold_columns(
113 'status' : { 'hidden' : true },
114 'request_time' : { 'hidden' : false },
115 'pickup_lib_shortname' : { 'hidden' : false },
116 'current_copy' : { 'hidden' : false },
117 'phone_notify' : { 'hidden' : false },
118 'email_notify' : { 'hidden' : false },
119 'hold_type' : { 'hidden' : false },
122 JSAN.use('util.list'); g.list = new util.list('holds_list');
126 'retrieve_row' : function(params) {
127 var row = params.row;
128 if (typeof params.on_retrieve == 'function') {
129 params.on_retrieve(row);
135 dump('hold details init_list done\n');
138 function a_list_of_one() {
146 'status' : g.blob.status,
148 'acn' : g.blob.volume,
150 'patron_family_name' : g.blob.patron_last,
151 'patron_first_given_name' : g.blob.patron_first,
152 'patron_barcode' : g.blob.patron_barcode,
153 'patron_alias' : g.blob.patron_alias,
154 'total_holds' : g.blob.total_holds,
155 'queue_position' : g.blob.queue_position,
156 'potential_copies' : g.blob.potential_copies,
157 'estimated_wait' : g.blob.estimated_wait,
158 'ahrn_count' : g.blob.hold.notes().length,
162 'no_auto_select' : true,
166 alert('Error in hold_details.js, a_list_of_one(): ' + E);
170 function retrieve_notifications() {
171 g.notifications = g.network.simple_request('FM_AHN_RETRIEVE_VIA_AHR.authoritative',[ ses(), g.ahr_id ]).reverse();
174 function retrieve_notes() {
175 g.notes = g.pcrud.search('ahrn',{'hold':g.ahr_id});
176 g.notes = g.notes.reverse();
179 function apply(node,field,value) {
184 case 'description' : n.appendChild( document.createTextNode( value ) ); break;
185 case 'label' : n.value = value; break;
186 default : n.value = value; break;
192 function render_notifications() {
193 JSAN.use('util.widgets'); util.widgets.remove_children('notifications_panel');
194 var np = $('notifications_panel');
196 for (var i = 0; i < g.notifications.length; i++) {
199 var node = $('notification_template').cloneNode(true); np.appendChild(node); node.hidden = false;
200 util.widgets.apply(node,'name','notify_time',
204 $("patronStrings").getFormattedString('staff.patron.hold_notices.tooltiptext',[g.notifications[i].id(), g.notifications[i].hold(), g.notifications[i].notify_staff()])
208 apply(node,'method',g.notifications[i].method() ? g.notifications[i].method() : '');
209 apply(node,'note',g.notifications[i].note() ? g.notifications[i].note() : '');
210 apply(node,'notify_time',g.notifications[i].notify_time() ? util.date.formatted_date( g.notifications[i].notify_time(), '%{localized}' ) : '');
215 function render_notes() {
216 JSAN.use('util.widgets'); util.widgets.remove_children('notes_panel');
217 var np = $('notes_panel');
219 for (var i = 0; i < g.notes.length; i++) {
222 var node = $('note_template').cloneNode(true); np.appendChild(node); node.hidden = false;
223 util.widgets.apply(node,'name','create_date',
227 $("patronStrings").getFormattedString('staff.patron.hold_notes.tooltiptext',[g.notes[i].id(), g.notes[i].hold(), g.notes[i].staff()])
231 apply(node,'title',g.notes[i].title() ? g.notes[i].title() : '');
232 apply(node,'note',g.notes[i].body() ? g.notes[i].body() : '');
233 apply(node,'pub',get_bool( g.notes[i].pub() ) ? $("patronStrings").getString('staff.patron.hold_notes.public') : $("patronStrings").getString('staff.patron.hold_notes.private') )
234 apply(node,'slip',get_bool( g.notes[i].slip() ) ? $("patronStrings").getString('staff.patron.hold_notes.print_on_slip') : $("patronStrings").getString('staff.patron.hold_notes.no_print_on_slip') )
235 apply(node,'staff',get_bool( g.notes[i].staff() ) ? $("patronStrings").getString('staff.patron.hold_notes.by_staff') : $("patronStrings").getString('staff.patron.hold_notes.by_patron') )
241 function new_notification() {
243 var xml = '<groupbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1">';
244 xml += '<caption label="' + $("patronStrings").getString('staff.patron.hold_notices.new_notification_record') + '"/><grid flex="1"><columns><column/><column flex="1"/></columns><rows>';
245 xml += '<row><label value="' + $("patronStrings").getString('staff.patron.hold_notices.method') + '"/><textbox id="method" name="fancy_data" context="clipboard"/></row>';
246 xml += '<row><label value="' + $("patronStrings").getString('staff.patron.hold_notices.note') + '"/><textbox multiline="true" id="note" name="fancy_data" context="clipboard"/></row>';
247 xml += '<row><spacer/><hbox><button label="' + $("patronStrings").getString('staff.patron.hold_notices.cancel') + '" name="fancy_cancel" ';
248 xml += 'accesskey="' + $("patronStrings").getString('staff.patron.hold_notices.cancel_accesskey') + '"/>';
249 xml += '<button label="' + $("patronStrings").getString('staff.patron.hold_notices.add_notif_record') + '" ';
250 xml += 'accesskey="' + $("patronStrings").getString('staff.patron.hold_notices.add_notif_record_accesskey') + '" name="fancy_submit"/></hbox></row></rows></grid></groupbox>';
251 JSAN.use('util.window'); var win = new util.window();
252 var fancy_prompt_data = win.open(
253 urls.XUL_FANCY_PROMPT,
254 'fancy_prompt', 'chrome,resizable,modal,width=700,height=500',
255 { 'xml' : xml, 'focus' : 'method', 'title' : $("patronStrings").getString('staff.patron.hold_notices.add_notif_record') }
257 if (fancy_prompt_data.fancy_status == 'complete') {
258 var notification = new ahn();
259 notification.isnew(1);
260 notification.hold(g.ahr_id);
261 notification.method( fancy_prompt_data.method );
262 notification.note( fancy_prompt_data.note );
263 var r = g.network.simple_request('FM_AHN_CREATE',[ ses(), notification ]); if (typeof r.ilsevent != 'undefined') throw(r);
264 setTimeout(function(){fetch_and_render_all();},0);
267 g.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.hold_notices.new_notification.not_created'),E);
268 setTimeout(function(){fetch_and_render_all();},0);
272 function new_note() {
274 var xml = '<groupbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1">';
275 xml += '<caption label="' + $("patronStrings").getString('staff.patron.hold_notes.new_note') + '"/><grid flex="1"><columns><column/><column flex="1"/></columns><rows>';
276 xml += '<row><label value="' + $('patronStrings').getString('staff.patron.hold_notes.new_note.public') + '"/><checkbox id="pub" name="fancy_data" checked="false"/></row>';
277 xml += '<row><label value="' + $('patronStrings').getString('staff.patron.hold_notes.new_note.slip') + '"/><checkbox id="slip" name="fancy_data" checked="false"/></row>';
278 xml += '<row><label value="' + $("patronStrings").getString('staff.patron.hold_notes.title') + '"/><textbox id="title" name="fancy_data" context="clipboard"/></row>';
279 xml += '<row><label value="' + $("patronStrings").getString('staff.patron.hold_notes.body') + '"/><textbox multiline="true" id="note" name="fancy_data" context="clipboard"/></row>';
280 xml += '<row><spacer/><hbox><button label="' + $("patronStrings").getString('staff.patron.hold_notes.cancel') + '" name="fancy_cancel" ';
281 xml += 'accesskey="' + $("patronStrings").getString('staff.patron.hold_notes.cancel_accesskey') + '"/>';
282 xml += '<button label="' + $("patronStrings").getString('staff.patron.hold_notes.add_note') + '" ';
283 xml += 'accesskey="' + $("patronStrings").getString('staff.patron.hold_notes.add_note.accesskey') + '" name="fancy_submit"/></hbox></row></rows></grid></groupbox>';
284 JSAN.use('util.window'); var win = new util.window();
285 var fancy_prompt_data = win.open(
286 urls.XUL_FANCY_PROMPT,
287 'fancy_prompt', 'chrome,resizable,modal,width=700,height=500',
288 { 'xml' : xml, 'focus' : 'title', 'title' : $("patronStrings").getString('staff.patron.hold_notes.add_note') }
290 if (fancy_prompt_data.fancy_status == 'complete') {
291 var note = new ahrn();
294 note.title( fancy_prompt_data.title );
295 note.body( fancy_prompt_data.note );
296 note.pub( get_bool( fancy_prompt_data.pub ) ? get_db_true() : get_db_false() );
297 note.slip( get_bool( fancy_prompt_data.slip ) ? get_db_true() : get_db_false() );
299 var r = g.network.simple_request('FM_AHRN_CREATE',[ ses(), note ]); if (typeof r.ilsevent != 'undefined') throw(r);
300 //g.pcrud.create(note);
301 setTimeout(function(){fetch_and_render_all();},0);
304 g.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.hold_notes.new_note.not_created'),E);
305 setTimeout(function(){fetch_and_render_all();},0);