]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/patron/info_notes.xul
roll our own textbox context menu for clipboard functions
[Evergreen.git] / Open-ILS / xul / staff_client / server / patron / info_notes.xul
1 <?xml version="1.0"?>
2 <!-- Application: Evergreen Staff Client -->
3 <!-- Screen: Patron Display -->
4
5 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
6 <!-- STYLESHEETS -->
7 <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
8 <?xml-stylesheet href="chrome://open_ils_staff_client/skin/global.css" type="text/css"?>
9 <?xml-stylesheet href="/xul/server/skin/global.css" type="text/css"?>
10 <?xml-stylesheet href="/xul/server/skin/patron_display.css" type="text/css"?>
11
12 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
13 <!-- LOCALIZATION -->
14 <!DOCTYPE window PUBLIC "" ""[
15         <!--#include virtual="/opac/locale/${locale}/lang.dtd"-->
16 ]>
17
18 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
19 <!-- OVERLAYS -->
20 <?xul-overlay href="/xul/server/OpenILS/util_overlay.xul"?>
21
22 <window id="patron_info_win" width="700" height="550"
23         onload="try{ my_init(); font_helper(); } catch(E) { alert(E); }"
24         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
25
26         <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
27         <!-- BEHAVIOR -->
28         <script type="text/javascript">
29                 var myPackageDir = 'open_ils_staff_client';
30                 var IAMXUL = true;
31                 var g = {};
32         </script>
33         <scripts id="openils_util_scripts"/>
34
35         <script type="text/javascript" src="/xul/server/main/JSAN.js"/>
36         <script>
37         <![CDATA[
38
39                 function $(id) { return document.getElementById(id); }
40
41                 function my_init() {
42                         try {
43                                 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
44                                 if (typeof JSAN == 'undefined') { throw( $("commonStrings").getString('common.jsan.missing') ); }
45                                 JSAN.errorLevel = "die"; // none, warn, or die
46                                 JSAN.addRepository('/xul/server/');
47
48                                 JSAN.use('util.error'); g.error = new util.error();
49                                 JSAN.use('util.network'); g.network = new util.network();
50                                 JSAN.use('util.date'); JSAN.use('util.money'); JSAN.use('patron.util');
51                                 JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
52
53                                 g.error.sdump('D_TRACE','my_init() for patron_info.xul');
54
55                                 g.patron_id = xul_param('patron_id');
56
57                                 g.new_note = false;
58
59                                 refresh();
60
61                         } catch(E) {
62                                 var err_msg = $("commonStrings").getFormattedString('common.exception', ['patron/info_notes.xul', E]);
63                                 try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); }
64                                 alert(err_msg);
65                         }
66                 }
67
68                 function refresh() {
69                         retrieve_notes(); render_notes();
70                 }
71
72                 function retrieve_notes() {
73                         if (g.new_note) {
74                                 g.notes = g.network.simple_request('FM_AUN_RETRIEVE_ALL.authoritative',[ ses(), { 'patronid' : g.patron_id } ]).reverse();
75                                 g.new_note = false;
76                         } else {
77                                 g.notes = g.network.simple_request('FM_AUN_RETRIEVE_ALL.authoritative',[ ses(), { 'patronid' : g.patron_id } ]).reverse();
78                         }
79                 }
80
81                 function apply(node,field,value) {
82                         util.widgets.apply(
83                                 node,'name',field,
84                                 function(n) {
85                                         switch(n.nodeName) {
86                                                 case 'description' : n.appendChild( document.createTextNode( value ) ); break;
87                                                 case 'label' : n.value = value; break;
88                                                 default : n.value = value; break;
89                                         }
90                                 }
91                         );
92                 }
93
94                 function render_notes() {
95                         JSAN.use('util.widgets'); util.widgets.remove_children('notes_panel');
96                         var np = $('notes_panel');
97                         var hbox = document.createElement('hbox'); np.appendChild(hbox);
98                         var btn = document.createElement('button'); hbox.appendChild(btn);
99                         btn.setAttribute('label', $("patronStrings").getString('staff.patron.info_notes.render_notes.add_new_note.label'));
100                         btn.setAttribute('accesskey', $("patronStrings").getString('staff.patron.info_notes.render_notes.add_new_note.accesskey'));
101                         btn.setAttribute('oncommand','new_note()');
102
103                         for (var i = 0; i < g.notes.length; i++) {
104
105                                 /* template */
106                                 var node = $('note_template').cloneNode(true); np.appendChild(node); node.hidden = false;
107                                 apply(node,'create_date',g.notes[i].create_date().toString().substr(0,10));
108                                 util.widgets.apply(node,'name','create_date',
109                                         function(n){n.setAttribute("tooltiptext", $("patronStrings").getFormattedString('staff.patron.info_notes.render_notes.tooltiptext', [g.notes[i].id(), g.notes[i].creator()]));}
110                                 );
111                                 apply(node,'title',g.notes[i].title());
112                                 if (get_bool(g.notes[i].pub())) {
113                                         apply(node, 'pub', $("patronStrings").getString('staff.patron.info_notes.render_notes.pub.patron_visible'));
114                                 } else {
115                                         apply(node, 'pub', $("patronStrings").getString('staff.patron.info_notes.render_notes.pub.staff_only') );
116                                 }
117                                 apply(node,'value',g.notes[i].value());
118                                 apply(node,'id',g.notes[i].id());
119                                 apply(node,'creator',g.notes[i].creator());
120
121                                 /* button bar */
122                                 var hb = document.createElement('hbox');
123                                 np.appendChild(hb);
124                                 var btn1 = document.createElement('button');
125                                 hb.appendChild(btn1);
126                                 btn1.setAttribute('label',$("patronStrings").getString('staff.patron.info_notes.render_notes.btn1.delete_note.label'));
127                                 btn1.setAttribute('image',"/xul/server/skin/media/images/up_arrow.gif");
128
129                                 btn1.addEventListener(
130                                         'command',
131                                         function(id){ 
132                                                 return function() { 
133                                                         var r = g.error.yns_alert(
134                                                                 $("patronStrings").getFormattedString('staff.patron.info_notes.render_notes.delete_note_message',[g.notes[id].title(), g.notes[id].create_date().toString().substr(0,10)]),
135                                                                 $("patronStrings").getString('staff.patron.info_notes.render_notes.delete_note_title'),
136                                                                 $("commonStrings").getString('common.yes'),
137                                                                 $("commonStrings").getString('common.no'),
138                                                                 null,
139                                                                 $("commonStrings").getString('common.check_to_confirm')
140                                                         ); 
141                                                         if (r == 0) {
142                                                                 g.network.simple_request('FM_AUN_DELETE',[ses(),g.notes[id].id()]);
143                                                                 setTimeout(function(){ 
144                                                                         g.new_note = true;
145                                                                         alert($("patronStrings").getString('staff.patron.info_notes.render_notes.note_deleted'));
146                                                                         refresh();
147                                                                 },0);
148                                                         }
149                                                 }
150                                          }
151                                         (i), false
152                                         );
153                                         var btn2 = document.createElement('button');
154                                         hb.appendChild(btn2);
155                                         btn2.setAttribute('label',$("patronStrings").getString('staff.patron.info_notes.render_notes.btn2.print_note.label'));
156                                         btn2.setAttribute('image',"/xul/server/skin/media/images/up_arrow.gif");
157
158                                         btn2.addEventListener(
159                                                 'command',
160                                                 function(id){ return function() { 
161                                                         try {
162                                                                 JSAN.use('patron.util'); 
163                                                                 var patron_obj = patron.util.retrieve_fleshed_au_via_id(ses(),g.patron_id);
164                                                                 var staff_obj = patron.util.retrieve_name_via_id( ses(), g.notes[id].creator() );
165                                                                 JSAN.use('util.print');
166                                                                 var p = new util.print();
167                                                                 p.simple(
168                                                                         '<hr/>'
169                                                                         + '<p>'+ $("patronStrings").getString('staff.patron.info_notes.render_notes.pertaining_to') + ' ' + 
170                                                                                 ( patron_obj.prefix() ? patron_obj.prefix() + ' ' : '') + 
171                                                                                 patron_obj.family_name() + ', ' + 
172                                                                                 patron_obj.first_given_name() + ' ' +
173                                                                                 ( patron_obj.second_given_name() ? patron_obj.second_given_name() + ' ' : '' ) +
174                                                                                 ( patron_obj.suffix() ? patron_obj.suffix() : '')
175                                                                                 + ' : ' 
176                                                                         + patron_obj.card().barcode() + '</p>'
177                                                                         + '<p><b>"' + g.notes[id].title() + '"</b>'
178                                                                         + $("patronStrings").getFormattedString('staff.patron.info_notes.render_notes.created_on', [g.notes[id].create_date().toString().substr(0,10), staff_obj[0], g.data.hash.aou[ staff_obj[3] ].shortname()]) 
179                                                                         + '</p><p>'
180                                                                         + g.notes[id].value()
181                                                                         + '</p><hr/>'
182                                                                 );
183                                                         } catch(E) {
184                                                                 g.error.standard_unexpected_error_alert($("patronStrings").getFormattedString('staff.patron.info_notes.render_notes.printing_note_num', [g.notes[id].id()]), E);
185                                                         }
186                                                 }
187                                         }(i), false
188                                 );
189                         }
190
191                 }
192                 
193                 function new_note() {
194                         try {
195                                 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalBrowserWrite");
196                                 var xml = '<groupbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1">';
197                                 xml += '<caption label="'+$("patronStrings").getString('staff.patron.info_notes.new_note.label')+'"/><grid flex="1"><columns><column/><column flex="1"/></columns><rows><row>';
198                                 xml += '<label value="'+$("patronStrings").getString('staff.patron.info_notes.new_note.patron_visible.value')+'"/><checkbox id="pub" name="fancy_data"/></row>';
199                                 xml += '<row><label value="'+$("patronStrings").getString('staff.patron.info_notes.new_note.title.value')+'"/><textbox id="title" name="fancy_data" context="clipboard"/></row>';
200                                 xml += '<row><label value="'+$("patronStrings").getString('staff.patron.info_notes.new_note.note.value')+'"/><textbox multiline="true" id="note" name="fancy_data" context="clipboard"/></row>';
201                                 xml += '<row><spacer/><hbox><button label="'+$("patronStrings").getString('staff.patron.info_notes.new_note.cancel.label')+'" name="fancy_cancel"';
202                                 xml += ' accesskey="'+$("patronStrings").getString('staff.patron.info_notes.new_note.cancel.accesskey')+'"/>';
203                                 xml += '<button label="'+$("patronStrings").getString('staff.patron.info_notes.new_note.add.label')+'"';
204                                 xml += ' accesskey="'+$("patronStrings").getString('staff.patron.info_notes.new_note.add.accesskey')+'" name="fancy_submit"/></hbox></row></rows></grid></groupbox>';
205                                 //g.data.init({'via':'stash'});
206                                 //g.data.temp_note_xml = xml; g.data.stash('temp_note_xml');
207                                 JSAN.use('util.window'); var win = new util.window();
208                                 var fancy_prompt_data = win.open(
209                                         urls.XUL_FANCY_PROMPT,
210                                         //+ '?xml_in_stash=temp_note_xml'
211                                         //+ '&focus=' + window.escape('title')
212                                         //+ '&title=' + window.escape('Add Note'),
213                                         'fancy_prompt', 'chrome,resizable,modal,width=700,height=500',
214                                         { 'xml' : xml, 'focus' : 'title', 'title' : $("patronStrings").getString('staff.patron.info_notes.new_note.add_note_title') }
215                                 );
216                                 if (fancy_prompt_data.fancy_status == 'complete') {
217                                         //alert(js2JSON(g.data.fancy_prompt_data));
218                                         var note = new aun();
219                                         note.isnew(1);
220                                         note.title( fancy_prompt_data.title );
221                                         note.value( fancy_prompt_data.note );
222                                         note.pub( get_bool( fancy_prompt_data.pub ) ? get_db_true() : get_db_false() );
223                                         note.usr( g.patron_id );
224                                         var r = g.network.simple_request('FM_AUN_CREATE',[ ses(), note ]);
225                                         if (typeof r.ilsevent != 'undefined') throw(r);
226                                         setTimeout(function(){
227                                                 g.new_note = true;
228                                                 alert($("patronStrings").getString('staff.patron.info_notes.new_note.add_note_title'));
229                                                 refresh();
230                                         },0);
231                                 }
232                         } catch(E) {
233                                 g.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.info_notes.new_note.note_not_created'),E);
234                         }
235                 }
236
237         ]]>
238         </script>
239         
240         <messagecatalog id="patronStrings" src="/xul/server/locale/<!--#echo var='locale'-->/patron.properties"/>
241
242         <stack hidden="true" id="note_template" flex="1">
243                 <groupbox flex="1" style="background-color: black;"/>
244                 <groupbox flex="1" style="background-color: #FFDE00; -moz-border-radius-topright: 35px;" >
245                         <hbox>
246                                 <description name="title" style="font-weight: bold"/>
247                                 <spacer flex="1"/>
248                                 <description name="create_date" style="font-weight: bold"/>
249                                 <description name="pub" style="font-weight: bold"/>
250                         </hbox>
251                         <description name="value"/>
252                 </groupbox>
253         </stack>
254
255         <vbox flex="1" class="my_overflow" id="notes_panel">
256         </vbox>
257
258
259 </window>
260