]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/opac/extras/circ/alt_holds_print.html
Add some reasonable default sorting to this expired holds list
[Evergreen.git] / Open-ILS / web / opac / extras / circ / alt_holds_print.html
1 <html>
2     <head>
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');
9         </style>
10         <style type="text/css">
11            /* html, body {
12                 height: 100%;
13                 width: 100%;
14                 margin: 0px 0px 0px 0px;
15                 padding: 0px 0px 0px 0px;
16                 overflow: hidden;
17             } */
18             body { font-size: 14pt; }
19             td {
20                 padding-right: 1em;
21                 padding-bottom: 1em;
22                 border-bottom: 1px #999 dashed;
23             }
24             th {
25                 text-align: left; font-weight: bold;
26                 border-bottom: 1px #000 solid;
27                 border-right: 1px #000 solid;
28                 padding: 0.5em;
29             }
30         </style>
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"];
40         </script>
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");
52
53             function do_pull_list(user, cgi) {
54                 progress_dialog.show(true);
55
56                 var any = false;
57
58                 fieldmapper.standardRequest(
59                     ['open-ils.circ','open-ils.circ.hold_pull_list.print.stream'],
60                     { async : true,
61                       params: [
62                         user.authtoken,
63                         { org_id     : cgi.param('o'),
64                           limit      : cgi.param('limit'),
65                           offset     : cgi.param('offset'),
66                           chunk_size : cgi.param('chunk_size'),
67                           sort       : sort_order
68                         }
69                       ],
70                       onresponse : function (r) {
71                         any = true;
72                         dojo.forEach( openils.Util.readResponse(r), function (hold_fm) {
73     
74                             // hashify the hold
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);
82     
83                             // clone the template's html
84                             var tr = dojo.clone(
85                                 dojo.query("tr", dojo.byId('template'))[0]
86                             );
87                             dojo.query("td:not([type])", tr).forEach(
88                                 function(td) {
89                                     td.innerHTML =
90                                         dojo.string.substitute(td.innerHTML, hold);
91                                 }
92                             );
93     
94                             new openils.BibTemplate({
95                                 root : tr,
96                                 xml  : dojox.xml.parser.parse(hold.current_copy.call_number.record.marc),
97                                 delay: false
98                             });
99     
100                             dojo.place(tr, "target");
101                         });
102                       },
103                       oncomplete : function () {
104                         progress_dialog.hide();
105                         if (any)
106                             window.print();
107                         else
108                             alert(dojo.byId("no_results").innerHTML);
109                       }
110                     }
111                 );
112             }
113
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");
122                         return;
123                     }
124                 }
125                 dojo.place(node, container, "last");
126             }
127
128             function do_shelf_expired_holds(user, cgi) {
129                 progress_dialog.show(true);
130
131                 var any = false;
132                 var target = dojo.byId("target");
133                 fieldmapper.standardRequest(
134                     ["open-ils.circ",
135                         "open-ils.circ.captured_holds.expired.print.stream"], {
136                         "async": true,
137                         "params": [
138                             user.authtoken, {
139                                 "org_id": cgi.param("o"),
140                                 "limit": cgi.param("limit"),
141                                 "offset": cgi.param("offset"),
142                                 "chunk_size": cgi.param("chunk_size"),
143                                 "sort": sort_order
144                             }
145                         ],
146                         "onresponse": function(r) {
147                             dojo.forEach(
148                                 openils.Util.readResponse(r),
149                                 function(hold_fields) {
150                                     any = true;
151                                     /* munge this object to make it look like
152                                        the template expects */
153                                     var hold  = {
154                                         "usr": {},
155                                         "current_copy": {
156                                             "barcode": hold_fields.barcode,
157                                             "call_number": {
158                                                 "label": hold_fields.label,
159                                                 "record": {"marc": hold_fields.marc}
160                                             },
161                                             "location": {"name": hold_fields.name}
162                                         }
163                                     };
164                                     if (hold_fields.alias) {
165                                         hold.usr.display_name = hold_fields.alias;
166                                     } else {
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 : "")
171                                         ].join(" ");
172                                     }
173                                     ["first_given_name","second_given_name","family_name","alias"].forEach(function(k) {hold.usr[k] = hold_fields[k]; });
174     
175                                     // clone the template's html
176                                     var tr = dojo.clone(
177                                         dojo.query("tr", dojo.byId('template'))[0]
178                                     );
179                                     dojo.query("td:not([type])", tr).forEach(
180                                         function(td) {
181                                             td.innerHTML =
182                                                 dojo.string.substitute(td.innerHTML, hold);
183                                         }
184                                     );
185             
186                                     new openils.BibTemplate({
187                                         "root": tr,
188                                         "xml": dojox.xml.parser.parse(hold.current_copy.call_number.record.marc),
189                                         "delay": false
190                                     });
191             
192                                     dojo.attr(
193                                         tr, "sortkey", hold.usr.display_name
194                                     );
195                                     place_by_sortkey(tr, target);
196                                 }
197                             );
198                         },
199                         "oncomplete": function() {
200                             progress_dialog.hide();
201                             if (any)
202                                 window.print();
203                             else
204                                 alert(dojo.byId("no_results").innerHTML);
205                         }
206                     }
207                 );
208             }
209
210             function my_init() {
211                 var cgi = new CGI();
212                 var ses = (typeof ses == "function" ? ses() : 0) ||
213                     cgi.param("ses") || dojo.cookie("ses");
214                 var user = new openils.User({"authtoken": ses});
215
216                 if (cgi.param("do") == "shelf_expired_holds") {
217                     do_shelf_expired_holds(user, cgi);
218                 } else {
219                     dojo.query("[only='shelf_expired_holds']").forEach(dojo.destroy);
220                     do_pull_list(user, cgi);
221                 }
222             }
223             dojo.addOnLoad(my_init);
224         </script>
225     </head>
226     <body class='tundra'>
227
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 -->
231
232         <table>
233             <tbody id='target'>
234                 <tr>
235                     <th>Title</th>
236                     <th>Author</th>
237                     <th>Shelving Location</th>
238                     <th>Call Number</th>
239                     <th>Barcode</th>
240                     <th only="shelf_expired_holds">Patron</th>
241                 </tr>
242             </tbody>
243             <tbody id='template' class='hide_me'>
244                 <tr>
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>
251                 </tr>
252             </tbody>
253         </table>
254
255 <!-- END OF TEMPLATE SECTION -->
256
257
258     </body>
259 </html>