3 <title>Printable Pull List</title>
4 <style type="text/css">
5 @import url('/js/dojo/dojo/resources/dojo.css');
6 @import url('/js/dojo/dijit/themes/tundra/tundra.css');
7 @import url('/js/dojo/dojox/widget/Toaster/Toaster.css');
8 @import url('/opac/skin/default/css/layout.css');
10 <style type="text/css">
14 margin: 0px 0px 0px 0px;
15 padding: 0px 0px 0px 0px;
18 body { font-size: 14pt; }
22 border-bottom: 1px #999 dashed;
25 text-align: left; font-weight: bold;
26 border-bottom: 1px #000 solid;
27 border-right: 1px #000 solid;
31 <!-- The OpenSRF API writ JS -->
32 <script language='javascript' src='/opac/common/js/utils.js' type='text/javascript'></script>
33 <script language='javascript' src='/opac/common/js/Cookies.js' type='text/javascript'></script>
34 <script language='javascript' src='/opac/common/js/CGI.js' type='text/javascript'></script>
35 <script language='javascript' src='/opac/common/js/JSON_v1.js' type='text/javascript'></script>
36 <!-- Dojo goodness -->
37 <script type="text/javascript">
38 var djConfig = {parseOnLoad:true,isDebug:false,AutoIDL:['aou','aout','pgt','ahr','acp','acn']};
39 var sort_order = ["acplo.position", "call_number", "request_time"];
41 <script type="text/javascript" src="/js/dojo/dojo/dojo.js"></script>
42 <script type="text/javascript" src="/js/dojo/dojo/openils_dojo.js"></script>
43 <script type="text/javascript" src="/js/dojo/dijit/dijit.js"></script>
44 <script type="text/javascript" src="/js/dojo/openils/AutoIDL.js"></script>
45 <script type="text/javascript" src="/js/dojo/openils/User.js"></script>
46 <script type="text/javascript" src="/js/dojo/openils/Util.js"></script>
47 <script type="text/javascript">
48 dojo.require("dojo.cookie");
49 dojo.require("dojox.xml.parser");
50 dojo.require("openils.BibTemplate");
51 dojo.require("openils.widget.ProgressDialog");
53 function do_pull_list(user, cgi) {
54 progress_dialog.show(true);
58 fieldmapper.standardRequest(
59 ['open-ils.circ','open-ils.circ.hold_pull_list.print.stream'],
63 { org_id : cgi.param('o'),
64 limit : cgi.param('limit'),
65 offset : cgi.param('offset'),
66 chunk_size : cgi.param('chunk_size'),
70 onresponse : function (r) {
72 dojo.forEach( openils.Util.readResponse(r), function (hold_fm) {
75 var hold = hold_fm.toHash(true);
76 hold.usr = hold_fm.usr().toHash(true);
77 hold.usr.card = hold_fm.usr().card().toHash(true);
78 hold.current_copy = hold_fm.current_copy().toHash(true);
79 hold.current_copy.location = hold_fm.current_copy().location().toHash(true);
80 hold.current_copy.call_number = hold_fm.current_copy().call_number().toHash(true);
81 hold.current_copy.call_number.record = hold_fm.current_copy().call_number().record().toHash(true);
83 // clone the template's html
85 dojo.query("tr", dojo.byId('template'))[0]
87 dojo.query("td:not([type])", tr).forEach(
90 dojo.string.substitute(td.innerHTML, hold);
94 new openils.BibTemplate({
96 xml : dojox.xml.parser.parse(hold.current_copy.call_number.record.marc),
100 dojo.place(tr, "target");
103 oncomplete : function () {
104 progress_dialog.hide();
108 alert(dojo.byId("no_results").innerHTML);
114 function place_by_sortkey(node, container) {
115 /*Don't use a forEach() or anything like that here. too slow.*/
116 var sortkey = dojo.attr(node, "sortkey");
117 for (var i = 0; i < container.childNodes.length; i++) {
118 var rover = container.childNodes[i];
119 if (rover.nodeType != 1) continue;
120 if (dojo.attr(rover, "sortkey") > sortkey) {
121 dojo.place(node, rover, "before");
125 dojo.place(node, container, "last");
128 function do_shelf_expired_holds(user, cgi) {
129 progress_dialog.show(true);
132 var target = dojo.byId("target");
133 fieldmapper.standardRequest(
135 "open-ils.circ.captured_holds.expired.print.stream"], {
139 "org_id": cgi.param("o"),
140 "limit": cgi.param("limit"),
141 "offset": cgi.param("offset"),
142 "chunk_size": cgi.param("chunk_size"),
146 "onresponse": function(r) {
148 openils.Util.readResponse(r),
149 function(hold_fields) {
151 /* munge this object to make it look like
152 the template expects */
156 "barcode": hold_fields.barcode,
158 "label": hold_fields.label,
159 "record": {"marc": hold_fields.marc}
161 "location": {"name": hold_fields.name}
164 if (hold_fields.alias) {
165 hold.usr.display_name = hold_fields.alias;
167 hold.usr.display_name = [
168 (hold_fields.family_name ? hold_fields.family_name : ""),
169 (hold_fields.first_given_name ? hold_fields.first_given_name : ""),
170 (hold_fields.second_given_name ? hold_fields.second_given_name : "")
173 ["first_given_name","second_given_name","family_name","alias"].forEach(function(k) {hold.usr[k] = hold_fields[k]; });
175 // clone the template's html
177 dojo.query("tr", dojo.byId('template'))[0]
179 dojo.query("td:not([type])", tr).forEach(
182 dojo.string.substitute(td.innerHTML, hold);
186 new openils.BibTemplate({
188 "xml": dojox.xml.parser.parse(hold.current_copy.call_number.record.marc),
193 tr, "sortkey", hold.usr.display_name
195 place_by_sortkey(tr, target);
199 "oncomplete": function() {
200 progress_dialog.hide();
204 alert(dojo.byId("no_results").innerHTML);
212 var ses = (typeof ses == "function" ? ses() : 0) ||
213 cgi.param("ses") || dojo.cookie("ses");
214 var user = new openils.User({"authtoken": ses});
216 if (cgi.param("do") == "shelf_expired_holds") {
217 do_shelf_expired_holds(user, cgi);
219 dojo.query("[only='shelf_expired_holds']").forEach(dojo.destroy);
220 do_pull_list(user, cgi);
223 dojo.addOnLoad(my_init);
226 <body class='tundra'>
228 <div dojoType="openils.widget.ProgressDialog" jsId="progress_dialog"></div>
229 <div class="hide_me" id="no_results">No results</div>
230 <!-- START OF TEMPLATE SECTION -->
237 <th>Shelving Location</th>
240 <th only="shelf_expired_holds">Patron</th>
243 <tbody id='template' class='hide_me'>
245 <td type='opac/slot-data' query='datafield[tag=245]'></td>
246 <td type='opac/slot-data' query='datafield[tag^=1]' limit='1'> </td>
247 <td>${current_copy.location.name}</td>
248 <td>${current_copy.call_number.label}</td>
249 <td>${current_copy.barcode}</td>
250 <td only="shelf_expired_holds">${usr.display_name}</td>
255 <!-- END OF TEMPLATE SECTION -->