From f5c5902d437b446b98c59ce7771bca1182328443 Mon Sep 17 00:00:00 2001 From: senator Date: Thu, 16 Dec 2010 16:43:57 -0500 Subject: [PATCH] Issuance holds --- Open-ILS/web/opac/skin/kcls/js/holds.js | 75 ++++++++------ Open-ILS/web/opac/skin/kcls/js/rdetail.js | 108 +++++++++++++++------ Open-ILS/web/opac/skin/kcls/xml/common/holds.xml | 6 ++ .../opac/skin/kcls/xml/rdetail/rdetail_summary.xml | 59 +++++++++++ 4 files changed, 191 insertions(+), 57 deletions(-) diff --git a/Open-ILS/web/opac/skin/kcls/js/holds.js b/Open-ILS/web/opac/skin/kcls/js/holds.js index b261eff862..3dd3d0a096 100644 --- a/Open-ILS/web/opac/skin/kcls/js/holds.js +++ b/Open-ILS/web/opac/skin/kcls/js/holds.js @@ -11,6 +11,14 @@ item_form is specified, use item_type(s)--language var noEmailMessage; var noEmailMessageXUL; +var holdTargetTypeMap = { + M : 'metarecord', + T : 'record', + V : 'volume', + I : 'issuance', + C : 'copy' +}; + function hideResultsPage(bool) { if(!bool) { unHideMe($('result_header')); @@ -207,20 +215,7 @@ function holdArgsFromHold(hold, oargs) { args.type = hold.hold_type(); var target = hold.target(); - switch(args.type) { - case 'M': - args.metarecord = target; - break; - case 'T': - args.record = target; - break; - case 'V': - args.volume = target; - break; - case 'C': - args.copy = target; - break; - } + args[holdTargetTypeMap[args.type]] = target; return args; } @@ -252,6 +247,8 @@ function holdFetchObjects(hold, doneCallback) { if( type == 'V' ) { _h_set_vol(args, doneCallback); + } else if (type == 'I') { + _h_set_issuance(args, doneCallback); } else { if( type == 'T' ) { _h_set_rec(args, doneCallback); @@ -286,6 +283,28 @@ function _h_set_vol(args, doneCallback) { } } +function _h_set_issuance(args, doneCallback) { + + if( args.issuanceObject ) { + args.issuance = args.issuanceObject.id(); + args.record = args.issuanceObject.subscription().record_entry(); + _h_set_rec(args, doneCallback); + + } else { + + var vreq = new Request(FETCH_ISSUANCE, [args.issuance]); + vreq.callback( + function(r) { + var issuance = r.getResultObject()[0]; + args.issuanceObject = issuance; + args.record = issuance.subscription().record_entry(); + _h_set_rec(args, doneCallback); + } + ); + vreq.send(); + } +} + function _h_set_rec(args, doneCallback) { if(args.recordObject) @@ -419,7 +438,14 @@ function __holdsDrawWindow() { appendClear($('holds_title'), text(rec.title())); appendClear($('holds_author'), text(rec.author())); - if( holdArgs.type == 'V' || holdArgs.type == 'C' ) { + if( holdArgs.type == 'I' ) { + unHideMe($('holds_type_row')); + unHideMe($('holds_is_issuance')); + unHideMe($('holds_issuance_row')); + appendClear($('holds_issuance_label'), text(holdArgs.issuanceObject.label())); + + } else if( holdArgs.type == 'V' || holdArgs.type == 'C' ) { + unHideMe($('holds_type_row')); unHideMe($('holds_cn_row')); @@ -440,6 +466,7 @@ function __holdsDrawWindow() { hideMe($('holds_type_row')); hideMe($('holds_copy_row')); hideMe($('holds_cn_row')); + hideMe($('holds_issuance_row')); } removeChildren($('holds_format')); @@ -562,7 +589,7 @@ function holdsParseMRFormats(str) { function holdsSetFormatSelector() { var type = holdArgs.type; - if( type == 'C' || type == 'V' || holdArgs.editHold ) return; + if( type == 'C' || type == 'V' || type == 'I' || holdArgs.editHold ) return; var data = holdsGetFormats(); var avail_formats = data.avail_formats; @@ -668,6 +695,7 @@ function holdsCheckPossibility(pickuplib, hold, recurse) { var args = { titleid : holdArgs.record, volume_id : holdArgs.volume, + issuanceid : holdArgs.issuance, copy_id : holdArgs.copy, hold_type : holdArgs.type, patronid : holdArgs.recipient.id(), @@ -749,20 +777,7 @@ function holdsBuildHoldFromWindow() { else hold.email_notify(0); - var target; - - switch(holdArgs.type) { - case 'M': - target = holdArgs.metarecord; break; - case 'T': - target = holdArgs.record; break; - case 'V': - target = holdArgs.volume; break; - case 'C': - target = holdArgs.copy; break; - } - - + var target = holdArgs[holdTargetTypeMap[holdArgs.type]]; hold.pickup_lib(org); //hold.request_lib(org); diff --git a/Open-ILS/web/opac/skin/kcls/js/rdetail.js b/Open-ILS/web/opac/skin/kcls/js/rdetail.js index ed8bcb5b9e..f63fc10bdb 100644 --- a/Open-ILS/web/opac/skin/kcls/js/rdetail.js +++ b/Open-ILS/web/opac/skin/kcls/js/rdetail.js @@ -8,12 +8,13 @@ attachEvt("rdetail", "recordDrawn", rdetailBuildStatusColumns); attachEvt("rdetail", "recordDrawn", rdetailBuildInfoRows); attachEvt("rdetail", "recordDrawn", rdetailGetPageIds); +dojo.requireLocalization("openils.opac", "opac"); + /* Per-skin configuration settings */ var rdetailLocalOnly = true; var rdetailShowLocal = true; var rdetailShowCopyLocation = true; var rdetailGoogleBookPreview = false; -var rdetailDisplaySerialHoldings = true; var rdetailEnableRefWorks = false; var rdetailRefWorksHost = 'http://www.refworks.com'; @@ -32,7 +33,7 @@ var globalCNCache = {}; var localTOC; var cachedRecords; var _statusPositions = {}; -var opac_strings; +var opac_strings = dojo.i18n.getLocalization("openils.opac", "opac"); var nextContainerIndex; @@ -49,13 +50,6 @@ if(location.href.match(/&place_hold=1/)) { hideMe(dojo.byId('canvas_main')); } -/* serials are currently the only use of Dojo strings in the OPAC */ - if (rdetailDisplaySerialHoldings) { - dojo.require("dijit.Menu"); - dojo.require("dijit.form.Button"); - dojo.requireLocalization("openils.opac", "opac"); - opac_strings = dojo.i18n.getLocalization("openils.opac", "opac"); - } } function rdetailReload() { @@ -171,24 +165,6 @@ function rdetailDraw() { } } - - if (rdetailDisplaySerialHoldings) { - var req = new Request(FETCH_MFHD_SUMMARY, getRid()); - req.callback(_holdingsDraw); - req.send(); - if (isXUL()) { - var here = findOrgUnit(getLocation()); - dojo.place("
", "rdetail_details_table", "after"); - var mfhd_add = new dijit.Menu({style:"float: right;"}); - new dijit.MenuItem({onClick:function(){ - var req = new Request(CREATE_MFHD_RECORD, G.user.session, 1, here.id(), getRid()); - var res = req.send(); - alert(dojo.string.substitute(opac_strings.CREATED_MFHD_RECORD, [here.name()])); - }, label:opac_strings.CREATE_MFHD}).placeAt(mfhd_add); - mfhd_add.placeAt('mfhd_ad_menu'); - } - } - detachAllEvt("result", "idsReceived"); G.evt.result.hitCountReceived = []; G.evt.result.recordReceived = []; @@ -1310,3 +1286,81 @@ function rdetailGBPViewerLoadCallback() { GBPViewer.load('ISBN:' + cleanISBN(record.isbn()) ); } + +function rdetailDrawExpandedHoldings(anchor, bibid, type) { + var offsets = {"basic": 0, "index": 0, "supplement": 0}; + var limit = 10; /* XXX give user control over this? */ + var target_id = "holding_type_" + type; + var target = dojo.byId(target_id); + + anchor.innerHTML = "[-]"; + anchor.oldonclick = anchor.onclick; + anchor.onclick = function() { + anchor.onclick = anchor.oldonclick; + anchor.innerHTML = "[+]"; + dojo.empty(target); + }; + + function _load() { + dojo.empty(target); + fieldmapper.standardRequest( + ["open-ils.serial", + "open-ils.serial.received_siss.retrieve.by_bib.atomic"], { + "params": [bibid, {"offset": offsets[type], "limit": limit}], + "async": true, + "oncomplete": function(r) { + try { + if (msg = r.recv().content()) { /* sic, assignment */ + if (!msg.length) return; + offsets[type] += msg.length; + var table = dojo.create("table", null, target); + dojo.forEach( + msg, function(o) { + var tr = dojo.create("tr", null, table); + dojo.create( + "td", { + "innerHTML": o.issuance.label(), + "style": {"paddingLeft": "3em"} + }, tr + ); + + if (!o.has_units) return; + /* can't place holds if no units */ + var td = dojo.create("td", null, tr); + dojo.create( + "a", { + "href":"javascript:void(0);", + "style": {"marginLeft": "1.5em"}, + "onclick": function() { + holdsDrawEditor({ + "type": "I", + "issuance": o.issuance.id() + }); + }, + "innerHTML": "[" + + opac_strings.PLACE_HOLD + "]" + }, td + ); + } + ); + if (msg.length == limit) { + dojo.create("br", null, target); + dojo.create( + "a", { + "href": "javascript:void(0);", + "innerHTML": + "[" + opac_strings.MORE + "]", + "onclick": _load + }, target + ); + } + } + } catch (E) { + void(0); + } + } + } + ); + } + _load(); +} diff --git a/Open-ILS/web/opac/skin/kcls/xml/common/holds.xml b/Open-ILS/web/opac/skin/kcls/xml/common/holds.xml index ff8a3639c6..7cdf480a06 100644 --- a/Open-ILS/web/opac/skin/kcls/xml/common/holds.xml +++ b/Open-ILS/web/opac/skin/kcls/xml/common/holds.xml @@ -66,6 +66,11 @@ id="holds_cancel">Cancel + + &common.issuance_label.label; + + + &common.copy.barcode.label; @@ -74,6 +79,7 @@ id="holds_cancel">Cancel &common.hold.type.label; &common.hold.volume; + &common.hold.issuance; &common.hold.copy; diff --git a/Open-ILS/web/opac/skin/kcls/xml/rdetail/rdetail_summary.xml b/Open-ILS/web/opac/skin/kcls/xml/rdetail/rdetail_summary.xml index 4f8564e6c0..8854f67bd1 100644 --- a/Open-ILS/web/opac/skin/kcls/xml/rdetail/rdetail_summary.xml +++ b/Open-ILS/web/opac/skin/kcls/xml/rdetail/rdetail_summary.xml @@ -95,7 +95,66 @@ + + + &rdetail.summary.issues_held; + + + ${holdingsStatement} + + + -- 2.11.0