]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/patron/hold_details.js
LP1615805 No inputs after submit in patron search (AngularJS)
[Evergreen.git] / Open-ILS / xul / staff_client / server / patron / hold_details.js
1 function $(id) { return document.getElementById(id); }
2
3 function my_init() {
4     try {
5         if (typeof JSAN == 'undefined') { throw( $("commonStrings").getString('common.jsan.missing') ); }
6         JSAN.errorLevel = "die"; // none, warn, or die
7         JSAN.addRepository('/xul/server/');
8
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'});
14
15         g.error.sdump('D_TRACE','my_init() for hold_notices.xul');
16
17         g.pcrud = new openils.PermaCrud({authtoken :ses()});
18
19         init_list();
20
21         if (xulG.ahr_id) fetch_and_render_all();
22
23         if (xul_param('when_done')) {
24             xul_param('when_done')();
25         }
26
27     } catch(E) {
28         try { g.error.standard_unexpected_error_alert('/xul/server/patron/hold_notices.xul',E); } catch(E) { alert('FIXME: ' + js2JSON(E)); }
29     }
30 }
31
32 function my_cleanup() {
33     try {
34         g.list.cleanup();
35         g.list.clear();
36     } catch(E) {
37         try { g.error.standard_unexpected_error_alert('/xul/server/patron/hold_notices.xul',E); } catch(E) { alert('FIXME: ' + js2JSON(E)); }
38     }
39 }
40
41 function fetch_and_render_all(do_not_refresh_parent_interface) {
42     try {
43         if (!xulG.ahr_id) { return; }
44
45         fetch_hold();
46
47         if (xulG.patron_rendered_elsewhere) {
48             // Hide patron line
49         } else {
50             render_patron();
51         }
52
53         a_list_of_one();
54
55         var x = document.getElementById('bib_brief_box'); while (x.firstChild) x.removeChild(x.lastChild);
56         if (xulG.bib_rendered_elsewhere) {
57             // No bib summary     
58             x.hidden = true;
59         } else {
60             x.hidden = false;
61             var bib_brief = document.createElement('iframe'); x.appendChild(bib_brief);
62             bib_brief.setAttribute('flex',1);
63             bib_brief.setAttribute('src',urls.XUL_BIB_BRIEF); 
64             get_contentWindow(bib_brief).xulG = { 'docid' : g.blob.mvr.doc_id() };
65         }
66
67         retrieve_notes(); render_notes();
68
69         retrieve_notifications(); render_notifications();
70
71         if (!do_not_refresh_parent_interface) {
72             if (typeof xulG.clear_and_retrieve == 'function') {
73                 xulG.clear_and_retrieve();
74             }
75         }
76
77     } catch(E) {
78         alert('Error in hold_details.js, fetch_and_render_all(): ' + E);
79     }
80 }
81
82 function fetch_hold(id) {
83     try {
84         g.ahr_id = xulG.ahr_id;
85         if (xulG.blob) {
86             g.blob = xulG.blob;
87             delete xulG.blob; // one-time deal for speed
88         } else {
89             g.blob = g.network.simple_request('FM_AHR_BLOB_RETRIEVE',[ ses(), g.ahr_id ]);
90             if (typeof g.ahr.ilsevent != 'undefined') { throw(g.ahr); }
91         }
92         g.ahr = g.blob.hold;
93         g.ahr.status( g.blob.status );
94     } catch(E) {
95         alert('Error in hold_details.js, fetch_hold(): ' + E);
96     }
97 }
98
99 function render_patron() {
100     if (g.ahr.usr()) {
101         JSAN.use('patron.util'); 
102         var au_obj = patron.util.retrieve_fleshed_au_via_id( ses(), g.ahr.usr() );
103         
104         $('patron_name').setAttribute('value', 
105             patron.util.format_name( au_obj ) + ' : ' + au_obj.card().barcode() 
106         );
107     }
108 }
109
110 function init_list() {
111     JSAN.use('circ.util');
112     var columns = circ.util.hold_columns( 
113         { 
114             'status' : { 'hidden' : true },
115             'request_time' : { 'hidden' : false },
116             'pickup_lib_shortname' : { 'hidden' : false },
117             'current_copy' : { 'hidden' : false },
118             'phone_notify' : { 'hidden' : false },
119             'email_notify' : { 'hidden' : false },
120             'hold_type' : { 'hidden' : false },
121         } 
122     );
123     JSAN.use('util.list'); g.list = new util.list('holds_list');
124     g.list.init(
125         {
126             'columns' : columns,
127             'retrieve_row' : function(params) {
128                 var row = params.row;
129                 if (typeof params.on_retrieve == 'function') {
130                     params.on_retrieve(row);
131                 }
132                 return row;
133             },
134         }
135     );
136     dump('hold details init_list done\n');
137 }
138
139 function a_list_of_one() {
140     try {
141         g.list.clear();
142         g.list.append(
143             {
144                 'row' : {
145                     'my' : {
146                         'ahr' : g.ahr,
147                         'status' : g.blob.status,
148                         'acp' : g.blob.copy,
149                         'acn' : g.blob.volume,
150                         'mvr' : g.blob.mvr,
151                         'patron_family_name' : g.blob.patron_last,
152                         'patron_first_given_name' : g.blob.patron_first,
153                         'patron_barcode' : g.blob.patron_barcode,
154                         'patron_alias' : g.blob.patron_alias,
155                         'total_holds' : g.blob.total_holds,
156                         'queue_position' : g.blob.queue_position,
157                         'potential_copies' : g.blob.potential_copies,
158                         'estimated_wait' : g.blob.estimated_wait,
159                         'ahrn_count' : g.blob.hold.notes().length,
160                         'blob' : g.blob
161                     }
162                 },
163                 'no_auto_select' : true,
164             }
165         );
166     } catch(E) {
167         alert('Error in hold_details.js, a_list_of_one(): ' + E);
168     }
169 }
170
171 function retrieve_notifications() {
172     g.notifications = g.network.simple_request('FM_AHN_RETRIEVE_VIA_AHR.authoritative',[ ses(), g.ahr_id ]).reverse();
173 }
174
175 function retrieve_notes() {
176     g.notes = g.pcrud.search('ahrn',{'hold':g.ahr_id});
177     g.notes = g.notes.reverse();
178 }
179
180 function apply(node,field,value) {
181     util.widgets.apply(
182         node,'name',field,
183         function(n) {
184             switch(n.nodeName) {
185                 case 'description' : n.appendChild( document.createTextNode( value ) ); break;
186                 case 'label' : n.value = value; break;
187                 default : n.value = value; break;
188             }
189         }
190     );
191 }
192
193 function render_notifications() {
194     JSAN.use('util.widgets'); util.widgets.remove_children('notifications_panel');
195     var np = $('notifications_panel');
196
197     for (var i = 0; i < g.notifications.length; i++) {
198
199         /* template */
200         var node = $('notification_template').cloneNode(true); np.appendChild(node); node.hidden = false;
201         util.widgets.apply(node,'name','notify_time',
202             function(n){
203                 n.setAttribute(
204                     "tooltiptext", 
205                     $("patronStrings").getFormattedString('staff.patron.hold_notices.tooltiptext',[g.notifications[i].id(), g.notifications[i].hold(), g.notifications[i].notify_staff()])
206                 );
207             }
208         );
209         apply(node,'method',g.notifications[i].method() ? g.notifications[i].method() : '');
210         apply(node,'note',g.notifications[i].note() ? g.notifications[i].note() : '');
211         apply(node,'notify_time',g.notifications[i].notify_time() ? util.date.formatted_date( g.notifications[i].notify_time(), '%{localized}' ) : '');
212     }
213
214 }
215
216 function render_notes() {
217     JSAN.use('util.widgets'); util.widgets.remove_children('notes_panel');
218     var np = $('notes_panel');
219
220     for (var i = 0; i < g.notes.length; i++) {
221
222         /* template */
223         var node = $('note_template').cloneNode(true); np.appendChild(node); node.hidden = false;
224         util.widgets.apply(node,'name','create_date',
225             function(n){
226                 n.setAttribute(
227                     "tooltiptext", 
228                     $("patronStrings").getFormattedString('staff.patron.hold_notes.tooltiptext',[g.notes[i].id(), g.notes[i].hold(), g.notes[i].staff()])
229                 );
230             }
231         );
232         apply(node,'title',g.notes[i].title() ? g.notes[i].title() : '');
233         apply(node,'note',g.notes[i].body() ? g.notes[i].body() : '');
234         apply(node,'pub',get_bool( g.notes[i].pub() ) ? $("patronStrings").getString('staff.patron.hold_notes.public') : $("patronStrings").getString('staff.patron.hold_notes.private') )
235         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') )
236         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') )
237     }
238
239 }
240
241
242 function new_notification() {
243     try {
244         var xml = '<groupbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1">';
245         xml += '<caption label="' + $("patronStrings").getString('staff.patron.hold_notices.new_notification_record') + '"/><grid flex="1"><columns><column/><column flex="1"/></columns><rows>';
246         xml += '<row><label value="' + $("patronStrings").getString('staff.patron.hold_notices.method') + '"/><textbox id="method" name="fancy_data" context="clipboard"/></row>';
247         xml += '<row><label value="' + $("patronStrings").getString('staff.patron.hold_notices.note') + '"/><textbox multiline="true" id="note" name="fancy_data" context="clipboard"/></row>';
248         xml += '<row><spacer/><hbox><button label="' + $("patronStrings").getString('staff.patron.hold_notices.cancel') + '" name="fancy_cancel" ';
249         xml += 'accesskey="' + $("patronStrings").getString('staff.patron.hold_notices.cancel_accesskey') + '"/>';
250         xml += '<button label="' + $("patronStrings").getString('staff.patron.hold_notices.add_notif_record') + '" ';
251         xml += 'accesskey="' + $("patronStrings").getString('staff.patron.hold_notices.add_notif_record_accesskey') + '" name="fancy_submit"/></hbox></row></rows></grid></groupbox>';
252         JSAN.use('util.window'); var win = new util.window();
253         var fancy_prompt_data = win.open(
254             urls.XUL_FANCY_PROMPT,
255             'fancy_prompt', 'chrome,resizable,modal,width=700,height=500',
256             { 'xml' : xml, 'focus' : 'method', 'title' : $("patronStrings").getString('staff.patron.hold_notices.add_notif_record') }
257         );
258         if (fancy_prompt_data.fancy_status == 'complete') {
259             var notification = new ahn();
260             notification.isnew(1);
261             notification.hold(g.ahr_id);
262             notification.method( fancy_prompt_data.method );
263             notification.note( fancy_prompt_data.note );
264             var r = g.network.simple_request('FM_AHN_CREATE',[ ses(), notification ]); if (typeof r.ilsevent != 'undefined') throw(r);
265             setTimeout(function(){fetch_and_render_all();},0);
266         }
267     } catch(E) {
268         g.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.hold_notices.new_notification.not_created'),E);
269         setTimeout(function(){fetch_and_render_all();},0);
270     }
271 }
272
273 function new_note() {
274     try {
275         var xml = '<groupbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1">';
276         xml += '<caption label="' + $("patronStrings").getString('staff.patron.hold_notes.new_note') + '"/><grid flex="1"><columns><column/><column flex="1"/></columns><rows>';
277         xml += '<row><label value="' + $('patronStrings').getString('staff.patron.hold_notes.new_note.public') + '"/><checkbox id="pub" name="fancy_data" checked="false"/></row>';
278         xml += '<row><label value="' + $('patronStrings').getString('staff.patron.hold_notes.new_note.slip') + '"/><checkbox id="slip" name="fancy_data" checked="false"/></row>';
279         xml += '<row><label value="' + $("patronStrings").getString('staff.patron.hold_notes.title') + '"/><textbox id="title" name="fancy_data" context="clipboard"/></row>';
280         xml += '<row><label value="' + $("patronStrings").getString('staff.patron.hold_notes.body') + '"/><textbox multiline="true" id="note" name="fancy_data" context="clipboard"/></row>';
281         xml += '<row><spacer/><hbox><button label="' + $("patronStrings").getString('staff.patron.hold_notes.cancel') + '" name="fancy_cancel" ';
282         xml += 'accesskey="' + $("patronStrings").getString('staff.patron.hold_notes.cancel_accesskey') + '"/>';
283         xml += '<button label="' + $("patronStrings").getString('staff.patron.hold_notes.add_note') + '" ';
284         xml += 'accesskey="' + $("patronStrings").getString('staff.patron.hold_notes.add_note.accesskey') + '" name="fancy_submit"/></hbox></row></rows></grid></groupbox>';
285         JSAN.use('util.window'); var win = new util.window();
286         var fancy_prompt_data = win.open(
287             urls.XUL_FANCY_PROMPT,
288             'fancy_prompt', 'chrome,resizable,modal,width=700,height=500',
289             { 'xml' : xml, 'focus' : 'title', 'title' : $("patronStrings").getString('staff.patron.hold_notes.add_note') }
290         );
291         if (fancy_prompt_data.fancy_status == 'complete') {
292             var note = new ahrn();
293             note.isnew(1);
294             note.hold(g.ahr_id);
295             note.title( fancy_prompt_data.title );
296             note.body( fancy_prompt_data.note );
297             note.pub( get_bool( fancy_prompt_data.pub ) ? get_db_true() : get_db_false() );
298             note.slip( get_bool( fancy_prompt_data.slip ) ? get_db_true() : get_db_false() );
299             note.staff( true );
300             var r = g.network.simple_request('FM_AHRN_CREATE',[ ses(), note ]); if (typeof r.ilsevent != 'undefined') throw(r);
301             //g.pcrud.create(note);
302             setTimeout(function(){fetch_and_render_all();},0);
303         }
304     } catch(E) {
305         g.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.hold_notes.new_note.not_created'),E);
306         setTimeout(function(){fetch_and_render_all();},0);
307     }
308 }
309
310