2 <!-- Application: Evergreen Staff Client -->
3 <!-- Screen: Copy Viewer/Editor -->
5 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
7 <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
8 <?xml-stylesheet href="/xul/server/skin/evergreen.css" type="text/css"?>
10 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
12 <!DOCTYPE window SYSTEM "chrome://evergreen/locale/lang.dtd">
14 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
16 <?xul-overlay href="/xul/server/OpenILS/util_overlay.xul"?>
18 <window id="cat_copy_editor_win"
19 onload="try { my_init(); } catch(E) { alert(E); }"
20 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
22 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
24 <script type="text/javascript">
25 var myPackageDir = 'evergreen'; var IAMXUL = true; var g = {};
27 <scripts id="openils_util_scripts"/>
29 <script type="text/javascript" src="/xul/server/main/JSAN.js"/>
33 g.readonly_field_names = [
34 ["barcode"], ["call_number"],
36 g.editable_field_names = [
37 ["circ_as_type", { } ],
39 ["circ_modifier", { } ],
41 ["copy_number", { } ],
42 ["create_date", { } ],
45 ["deposit_amount", { } ],
50 ["loan_duration", { } ],
52 ["opac_visible", { } ],
60 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
61 if (typeof JSAN == 'undefined') { throw( "The JSAN library object is missing."); }
62 JSAN.errorLevel = "die"; // none, warn, or die
63 JSAN.addRepository('/xul/server/');
64 JSAN.use('util.error'); g.error = new util.error();
65 g.error.sdump('D_TRACE','my_init() for cat/copy_editor.xul');
69 g.session = g.cgi.param('session') || g.cgi.param('ses');
72 if (g.cgi.param('copy_ids')) copy_ids = JSON2js( g.cgi.param('copy_ids') );
73 if (!copy_ids) copy_ids = [];
74 if (window.xulG && window.xulG.copy_ids) copy_ids = copy_ids.concat( window.xulG.copy_ids );
76 if (g.cgi.param('edit')) { document.getElementById('caption').setAttribute('label','Copy Editor'); }
78 JSAN.use('util.network'); g.network = new util.network();
80 if (copy_ids.length > 0) g.copies = g.network.request(
81 api.FM_ACP_FLESHED_BATCH_RETRIEVE.app,
82 api.FM_ACP_FLESHED_BATCH_RETRIEVE.method,
86 if (!g.copies) g.copies = [];
87 if (window.xulG && window.xulG.copies) g.copies = g.copies.concat( window.xulG.copies );
89 g.summarize( g.copies );
93 var err_msg = "!! This software has encountered an error. Please tell your friendly " +
94 "system administrator or software developer the following:\ncat/copy_editor.xul\n" + E + '\n';
95 try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); dump(js2JSON(E)); }
100 g.summarize = function( copies ) {
102 g.field_names = g.readonly_field_names.concat( g.editable_field_names );
103 for (var i = 0; i < g.field_names.length; i++) {
104 var field_name = g.field_names[i][0];
105 g.summary[ field_name ] = {};
106 for (var j = 0; j < copies.length; j++) {
107 var copy = copies[j];
108 var cmd = 'copy.' + field_name + '();';
109 var value = eval( cmd );
110 if (typeof value == 'object' && value != null) {
111 //dump('value = ' + js2JSON(value) + '\n');
112 try { value = value.id(); } catch(E) {
114 try { dump(js2JSON(value) + '\n'); } catch(F) { dump(F); }
117 if (g.summary[ field_name ][ value ]) {
118 g.summary[ field_name ][ value ]++;
120 g.summary[ field_name ][ value ] = 1;
124 dump('summary = ' + js2JSON(g.summary) + '\n');
127 g.render = function() {
129 JSAN.use('util.widgets');
132 var cns = document.getElementById('call_number_summary');
133 util.widgets.remove_children( cns );
134 var bcs = document.getElementById('barcode_summary');
135 util.widgets.remove_children( bcs );
136 var rp = document.getElementById('right_pane');
137 util.widgets.remove_children( rp );
139 for (var i in g.summary.call_number) {
140 var cn = i; var count = g.summary.call_number[i];
141 var hbox = document.createElement('hbox'); cns.appendChild(hbox);
142 var cn_label = document.createElement('label'); hbox.appendChild(cn_label);
143 cn_label.setAttribute('value',cn);
144 //var count_label = document.createElement('label'); hbox.appendChild(count_label);
145 //count_label.setAttribute('value',count);
148 for (var i in g.summary.barcode) {
150 var hbox = document.createElement('hbox'); bcs.appendChild(hbox);
151 var bc_label = document.createElement('label'); hbox.appendChild(bc_label);
152 bc_label.setAttribute('value',bc);
156 for (var i = 0; i < g.editable_field_names.length; i++) {
157 var f = g.editable_field_names[i]; var fn = f[0];
158 var hbox = document.createElement('hbox'); rp.appendChild(hbox);
159 var label = document.createElement('label'); hbox.appendChild(label);
160 label.setAttribute('value',fn); label.setAttribute('style','font-family: bold');
161 var vbox = document.createElement('vbox'); hbox.appendChild(vbox);
162 var grid = util.widgets.make_grid( [ { 'flex' : 1 }, {} ] ); vbox.appendChild(grid);
163 grid.setAttribute('flex','1');
164 var rows = grid.lastChild;
165 for (var j in g.summary[fn]) {
166 var value = j; var count = g.summary[fn][j];
167 var row = document.createElement('row'); rows.appendChild(row);
168 var label1 = document.createElement('label'); row.appendChild(label1);
169 label1.setAttribute('value',value);
170 var label2 = document.createElement('label'); row.appendChild(label2);
171 label2.setAttribute('value',count);
173 var vbox2 = document.createElement('vbox'); vbox.appendChild(vbox2);
180 <caption id="caption" label="Copy Viewer"/>
182 <vbox style="overflow: scroll"> <!-- left pane -->
183 <groupbox id="gb_callnumbers">
184 <caption label="Call Numbers"/>
185 <vbox id="call_number_summary" flex="1"/>
187 <groupbox id="gb_barcodes">
188 <caption label="Barcodes"/>
189 <vbox id="barcode_summary" flex="1"/>
192 <splitter><grippy /></splitter>
193 <vbox id="right_pane" style="overflow: scroll" flex="1"> <!-- right pane -->
195 <label value="Status"/>
197 <vbox id="status_summary" flex="1"/>
198 <vbox id="status_entry"/>