--- /dev/null
+dojo.require("dojo.cookie");
+dojo.require("dojox.xml.parser");
+dojo.require("openils.BibTemplate");
+dojo.require("openils.widget.ProgressDialog");
+
+var authtoken;
+var cgi;
+
+function do_pull_list() {
+ progress_dialog.show(true);
+
+ var any = false;
+
+ fieldmapper.standardRequest(
+ ['open-ils.circ','open-ils.circ.hold_pull_list.print.stream'],
+ { async : true,
+ params: [
+ authtoken, {
+ org_id : cgi.param('o'),
+ limit : cgi.param('limit'),
+ offset : cgi.param('offset'),
+ chunk_size : cgi.param('chunk_size'),
+ sort : sort_order
+ }
+ ],
+ onresponse : function (r) {
+ any = true;
+ dojo.forEach( openils.Util.readResponse(r), function (hold_fm) {
+
+ // hashify the hold
+ var hold = hold_fm.toHash(true);
+ hold.usr = hold_fm.usr().toHash(true);
+ hold.usr.card = hold_fm.usr().card().toHash(true);
+ hold.current_copy = hold_fm.current_copy().toHash(true);
+ hold.current_copy.location = hold_fm.current_copy().location().toHash(true);
+ hold.current_copy.call_number = hold_fm.current_copy().call_number().toHash(true);
+ hold.current_copy.call_number.record = hold_fm.current_copy().call_number().record().toHash(true);
+
+ // clone the template's html
+ var tr = dojo.clone(
+ dojo.query("tr", dojo.byId('template'))[0]
+ );
+ dojo.query("td:not([type])", tr).forEach(
+ function(td) {
+ td.innerHTML =
+ dojo.string.substitute(td.innerHTML, hold);
+ }
+ );
+
+ new openils.BibTemplate({
+ root : tr,
+ xml : dojox.xml.parser.parse(hold.current_copy.call_number.record.marc),
+ delay: false
+ });
+
+ dojo.place(tr, "target");
+ });
+ },
+ oncomplete : function () {
+ progress_dialog.hide();
+ if (any)
+ window.print();
+ else
+ alert(dojo.byId("no_results").innerHTML);
+ }
+ }
+ );
+}
+
+function place_by_sortkey(node, container) {
+ /*Don't use a forEach() or anything like that here. too slow.*/
+ var sortkey = dojo.attr(node, "sortkey");
+ for (var i = 0; i < container.childNodes.length; i++) {
+ var rover = container.childNodes[i];
+ if (rover.nodeType != 1) continue;
+ if (dojo.attr(rover, "sortkey") > sortkey) {
+ dojo.place(node, rover, "before");
+ return;
+ }
+ }
+ dojo.place(node, container, "last");
+}
+
+function hashify_fields(fields) {
+ var hold = {
+ "usr": {},
+ "current_copy": {
+ "barcode": fields.barcode,
+ "call_number": {
+ "label": fields.label,
+ "record": {"marc": fields.marc}
+ },
+ "location": {"name": fields.name}
+ }
+ };
+
+ if (fields.alias) {
+ hold.usr.display_name = fields.alias;
+ } else {
+ hold.usr.display_name = [
+ (fields.family_name ? fields.family_name : ""),
+ (fields.first_given_name ? fields.first_given_name : ""),
+ (fields.second_given_name ? fields.second_given_name : "")
+ ].join(" ");
+ }
+
+ ["first_given_name","second_given_name","family_name","alias"].forEach(
+ function(k) { hold.usr[k] = fields[k]; }
+ );
+
+ return hold;
+}
+
+function do_clear_holds() {
+ progress_dialog.show(true);
+
+ var launcher;
+ fieldmapper.standardRequest(
+ ["open-ils.circ", "open-ils.circ.hold.clear_shelf.process"], {
+ "async": true,
+ "params": [authtoken, cgi.param("o")],
+ "onresponse": function(r) {
+ if (r = openils.Util.readResponse(r)) {
+ if (r.cache_key) { /* complete */
+ launcher = dojo.byId("clear_holds_launcher");
+ launcher.innerHTML = "Re-fetch for Printing"; /* XXX i18n */
+ launcher.onclick =
+ function() { do_clear_holds_from_cache(r.cache_key); };
+ dojo.byId("clear_holds_set_label").innerHTML = r.cache_key;
+ } else if (r.maximum) {
+ progress_dialog.update(r);
+ }
+ }
+ },
+ "oncomplete": function() {
+ progress_dialog.hide();
+ if (launcher) launcher.onclick();
+ else alert(dojo.byId("no_results").innerHTML);
+ }
+ }
+ );
+}
+
+function do_clear_holds_from_cache(cache_key) {
+ progress_dialog.show(true);
+
+ var any = 0;
+ var target = dojo.byId("target");
+ dojo.empty(target);
+ var template = dojo.query("tr", dojo.byId("template"))[0];
+ fieldmapper.standardRequest(
+ ["open-ils.circ",
+ "open-ils.circ.hold.clear_shelf.get_cache"], {
+ "async": true,
+ "params": [authtoken, cache_key, cgi.param("chunk_size")],
+ "onresponse": function(r) {
+ dojo.forEach(
+ openils.Util.readResponse(r),
+ function(resp) {
+ if (resp.maximum) {
+ progress_dialog.update(resp);
+ return;
+ }
+
+ var hold = hashify_fields(resp.hold_details);
+ hold.action = resp.action;
+
+ var tr = dojo.clone(template);
+ any++;
+
+ dojo.query("td:not([type])", tr).forEach(
+ function(td) {
+ td.innerHTML =
+ dojo.string.substitute(td.innerHTML, hold);
+ }
+ );
+
+ new openils.BibTemplate({
+ "root": tr,
+ "xml": dojox.xml.parser.parse(
+ hold.current_copy.call_number.record.marc
+ ),
+ "delay": false
+ });
+
+ dojo.attr(tr, "sortkey", hold.usr.display_name);
+ place_by_sortkey(tr, target);
+ }
+ );
+ progress_dialog.update({"progress": any});
+ },
+ "oncomplete": function() {
+ progress_dialog.hide();
+ if (any)
+ window.print();
+ else
+ alert(dojo.byId("no_results").innerHTML);
+ }
+ }
+ );
+}
+