]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/opac/extras/circ/alt_holds_print.js
Include call number prefix/suffix in display and sorting of holds for Print Full...
[Evergreen.git] / Open-ILS / web / opac / extras / circ / alt_holds_print.js
1 dojo.require("dojo.cookie");
2 dojo.require("dojox.xml.parser");
3 dojo.require("openils.BibTemplate");
4 dojo.require("openils.widget.ProgressDialog");
5
6 var authtoken;
7 var cgi;
8
9 function do_pull_list() {
10     progress_dialog.show(true);
11
12     var any = false;
13
14     fieldmapper.standardRequest(
15         ['open-ils.circ','open-ils.circ.hold_pull_list.print.stream'],
16         { async : true,
17           params: [
18             authtoken, {
19               org_id     : cgi.param('o'),
20               limit      : cgi.param('limit'),
21               offset     : cgi.param('offset'),
22               chunk_size : cgi.param('chunk_size'),
23               sort       : sort_order
24             }
25           ],
26           onresponse : function (r) {
27             any = true;
28             dojo.forEach( openils.Util.readResponse(r), function (hold_fm) {
29
30                 // hashify the hold
31                 var hold = hold_fm.toHash(true);
32                 hold.usr = hold_fm.usr().toHash(true);
33                 hold.usr.card = hold_fm.usr().card().toHash(true);
34                 hold.current_copy = hold_fm.current_copy().toHash(true);
35                 hold.current_copy.location = hold_fm.current_copy().location().toHash(true);
36                 hold.current_copy.call_number = hold_fm.current_copy().call_number().toHash(true);
37                 hold.current_copy.call_number.record = hold_fm.current_copy().call_number().record().toHash(true);
38                 hold.current_copy.call_number.prefix = hold_fm.current_copy().call_number().prefix().toHash(true);
39                 hold.current_copy.call_number.suffix = hold_fm.current_copy().call_number().suffix().toHash(true);
40
41                 // clone the template's html
42                 var tr = dojo.clone(
43                     dojo.query("tr", dojo.byId('template'))[0]
44                 );
45                 dojo.query("td:not([type])", tr).forEach(
46                     function(td) {
47                         td.innerHTML =
48                             dojo.string.substitute(td.innerHTML, hold);
49                     }
50                 );
51
52                 new openils.BibTemplate({
53                     root : tr,
54                     xml  : dojox.xml.parser.parse(hold.current_copy.call_number.record.marc),
55                     delay: false
56                 });
57
58                 dojo.place(tr, "target");
59             });
60           },
61           oncomplete : function () {
62             progress_dialog.hide();
63             setTimeout(
64                 function() {
65                     if (any) window.print();
66                     else alert(dojo.byId("no_results").innerHTML);
67                 }, 500  /* give the progress_dialog more time to go away */
68             );
69           }
70         }
71     );
72 }
73
74 function place_by_sortkey(node, container) {
75     /*Don't use a forEach() or anything like that here. too slow.*/
76     var sortkey = dojo.attr(node, "sortkey");
77     for (var i = 0; i < container.childNodes.length; i++) {
78         var rover = container.childNodes[i];
79         if (rover.nodeType != 1) continue;
80         if (dojo.attr(rover, "sortkey") > sortkey) {
81             dojo.place(node, rover, "before");
82             return;
83         }
84     }
85     dojo.place(node, container, "last");
86 }
87
88 function hashify_fields(fields) {
89     var hold  = {
90         "usr": {},
91         "current_copy": {
92             "barcode": fields.barcode,
93             "call_number": {
94                 "label": fields.label,
95                 "record": {"marc": fields.marc}
96             },
97             "location": {"name": fields.name}
98         }
99     };
100
101     if (fields.alias) {
102         hold.usr.display_name = fields.alias;
103     } else {
104         hold.usr.display_name = [
105             (fields.family_name ? fields.family_name : ""),
106             (fields.first_given_name ? fields.first_given_name : ""),
107             (fields.second_given_name ? fields.second_given_name : "")
108         ].join(" ");
109     }
110
111     ["first_given_name","second_given_name","family_name","alias"].forEach(
112         function(k) { hold.usr[k] = fields[k]; }
113     );
114
115     return hold;
116 }
117
118 function do_clear_holds() {
119     progress_dialog.show(true);
120
121     var launcher;
122     fieldmapper.standardRequest(
123         ["open-ils.circ", "open-ils.circ.hold.clear_shelf.process"], {
124             "async": true,
125             "params": [authtoken, cgi.param("o")],
126             "onresponse": function(r) {
127                 if (r = openils.Util.readResponse(r)) {
128                     if (r.cache_key) { /* complete */
129                         launcher = dojo.byId("clear_holds_launcher");
130                         launcher.innerHTML = "Re-fetch for Printing"; /* XXX i18n */
131                         launcher.onclick =
132                             function() { do_clear_holds_from_cache(r.cache_key); };
133                         dojo.byId("clear_holds_set_label").innerHTML = r.cache_key;
134                     } else if (r.maximum) {
135                         progress_dialog.update(r);
136                     }
137                 }
138             },
139             "oncomplete": function() {
140                 progress_dialog.hide();
141                 if (launcher) launcher.onclick();
142                 else alert(dojo.byId("no_results").innerHTML);
143             }
144         }
145     );
146 }
147
148 function do_clear_holds_from_cache(cache_key) {
149     progress_dialog.show(true);
150
151     var any = 0;
152     var target = dojo.byId("target");
153     dojo.empty(target);
154     var template = dojo.query("tr", dojo.byId("template"))[0];
155     fieldmapper.standardRequest(
156         ["open-ils.circ",
157             "open-ils.circ.hold.clear_shelf.get_cache"], {
158             "async": true,
159             "params": [authtoken, cache_key, cgi.param("chunk_size")],
160             "onresponse": function(r) {
161                 dojo.forEach(
162                     openils.Util.readResponse(r),
163                     function(resp) {
164                         if (resp.maximum) {
165                             progress_dialog.update(resp);
166                             return;
167                         }
168
169                         var hold = hashify_fields(resp.hold_details);
170                         hold.action = resp.action;
171
172                         var tr = dojo.clone(template);
173                         any++;
174
175                         dojo.query("td:not([type])", tr).forEach(
176                             function(td) {
177                                 td.innerHTML =
178                                     dojo.string.substitute(td.innerHTML, hold);
179                             }
180                         );
181
182                         new openils.BibTemplate({
183                             "root": tr,
184                             "xml": dojox.xml.parser.parse(
185                                 hold.current_copy.call_number.record.marc
186                             ),
187                             "delay": false
188                         });
189
190                         dojo.attr(tr, "sortkey", hold.usr.display_name);
191                         place_by_sortkey(tr, target);
192                     }
193                 );
194                 progress_dialog.update({"progress": any});
195             },
196             "oncomplete": function() {
197                 progress_dialog.hide();
198                 if (any)
199                     window.print();
200                 else
201                     alert(dojo.byId("no_results").innerHTML);
202             }
203         }
204     );
205 }
206