]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/opac/extras/circ/alt_holds_print.html
New way to printing shelf-expired holds
[working/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 do_shelf_expired_holds(user, cgi) {
115                 progress_dialog.show(true);
116
117                 var any = false;
118                 fieldmapper.standardRequest(
119                     ["open-ils.circ",
120                         "open-ils.circ.captured_holds.expired.print.stream"], {
121                         "async": true,
122                         "params": [
123                             user.authtoken, {
124                                 "org_id": cgi.param("o"),
125                                 "limit": cgi.param("limit"),
126                                 "offset": cgi.param("offset"),
127                                 "chunk_size": cgi.param("chunk_size"),
128                                 "sort": sort_order
129                             }
130                         ],
131                         "onresponse": function(r) {
132                             dojo.forEach(
133                                 openils.Util.readResponse(r),
134                                 function(hold_fields) {
135                                     any = true;
136                                     /* munge this object to make it look like
137                                        the template expects */
138                                     var hold  = {
139                                         "usr": {},
140                                         "current_copy": {
141                                             "barcode": hold_fields.barcode,
142                                             "call_number": {
143                                                 "label": hold_fields.label,
144                                                 "record": {"marc": hold_fields.marc}
145                                             },
146                                             "location": {"name": hold_fields.name}
147                                         }
148                                     };
149                                     if (hold_fields.alias) {
150                                         hold.usr.display_name = hold_fields.alias;
151                                     } else {
152                                         hold.usr.display_name = [
153                                             (hold_fields.family_name ? hold_fields.family_name : ""),
154                                             (hold_fields.first_given_name ? hold_fields.first_given_name : ""),
155                                             (hold_fields.second_given_name ? hold_fields.second_given_name : "")
156                                         ].join(" ");
157                                     }
158                                     ["first_given_name","second_given_name","family_name","alias"].forEach(function(k) {hold.usr[k] = hold_fields[k]; });
159     
160                                     // clone the template's html
161                                     var tr = dojo.clone(
162                                         dojo.query("tr", dojo.byId('template'))[0]
163                                     );
164                                     dojo.query("td:not([type])", tr).forEach(
165                                         function(td) {
166                                             td.innerHTML =
167                                                 dojo.string.substitute(td.innerHTML, hold);
168                                         }
169                                     );
170             
171                                     new openils.BibTemplate({
172                                         "root": tr,
173                                         "xml": dojox.xml.parser.parse(hold.current_copy.call_number.record.marc),
174                                         "delay": false
175                                     });
176             
177                                     dojo.place(tr, "target");
178                                 }
179                             );
180                         },
181                         "oncomplete": function() {
182                             progress_dialog.hide();
183                             if (any)
184                                 window.print();
185                             else
186                                 alert(dojo.byId("no_results").innerHTML);
187                         }
188                     }
189                 );
190             }
191
192             function my_init() {
193                 var cgi = new CGI();
194                 var ses = (typeof ses == "function" ? ses() : 0) ||
195                     cgi.param("ses") || dojo.cookie("ses");
196                 var user = new openils.User({"authtoken": ses});
197
198                 if (cgi.param("do") == "shelf_expired_holds") {
199                     do_shelf_expired_holds(user, cgi);
200                 } else {
201                     dojo.query("[only='shelf_expired_holds']").forEach(dojo.destroy);
202                     do_pull_list(user, cgi);
203                 }
204             }
205             dojo.addOnLoad(my_init);
206         </script>
207     </head>
208     <body class='tundra'>
209
210         <div dojoType="openils.widget.ProgressDialog" jsId="progress_dialog"></div>
211         <div class="hide_me" id="no_results">No results</div>
212 <!-- START OF TEMPLATE SECTION -->
213
214         <table>
215             <tbody id='target'>
216                 <tr>
217                     <th>Title</th>
218                     <th>Author</th>
219                     <th>Shelving Location</th>
220                     <th>Call Number</th>
221                     <th>Barcode</th>
222                     <th only="shelf_expired_holds">Patron</th>
223                 </tr>
224             </tbody>
225             <tbody id='template' class='hide_me'>
226                 <tr>
227                     <td type='opac/slot-data' query='datafield[tag=245]'></td>
228                     <td type='opac/slot-data' query='datafield[tag^=1]' limit='1'> </td>
229                     <td>${current_copy.location.name}</td>
230                     <td>${current_copy.call_number.label}</td>
231                     <td>${current_copy.barcode}</td>
232                     <td only="shelf_expired_holds">${usr.display_name}</td>
233                 </tr>
234             </tbody>
235         </table>
236
237 <!-- END OF TEMPLATE SECTION -->
238
239
240     </body>
241 </html>